2013-01-03 4 views
10

Ich habe drei Tabellen: class, student und teacherWie Unterabfrage in "Von" -Klausel in Ruhezustand verwenden?

table class 
{ 
    class_id(PK) 
} 

table student 
{ 
    student_id(PK) 
    class_id(PK+FK) 
} 

table teacher 
{ 
    teacher_id(PK) 
    class_id(PK+FK) 
} 

Ich habe eine Abfrage in SQL, der gut arbeitet.

SELECT data.class_id, count(data.class_id) AS count 
FROM ((SELECT class_id FROM student) 
     union all 
     (SELECT class_id FROM teacher)) AS data 
GROUP BY data.user_id 
ORDER BY count desc 

Die Abfrage enthält Sub-Abfrage in der von Klausel und Vereinigungsoperation. Ich kann es nicht in die HQL konvertieren.

Bitte geben Sie mir die effiziente HQL-Abfrage von der obigen SQL-Abfrage.

Antwort

8

Leider HQL does not support UNION queries. Zwei alternative Strategien, um Ihr Problem zu lösen sind:

  • Zuordnen eines Pojo to a a view
  • Oder Inheritance mapping. Besonders Table per concrete class Strategie mit einer abstrakten Person geordneten Klasse geerbt sowohl von Student und Teacher scheint Ihr Problem gut zu passen:

    select p.id, count(c) 
    from Person p join p.classes c 
    group by p.id 
    order by count(c) desc 
    
+0

Danke für die Dokumentation Links. Das erneute Lesen dieser Abschnitte hat sich gelohnt. – carbontax

7

Sie können eine Unterabfrage nicht in der from-Klausel in HQL platzieren. Nur select oder where Klauseln.