2013-01-03 13 views
10

Ho tre tabelle: class, student e teacherCome utilizzare la sottoquery nella clausola "from" in sospensione?

table class 
{ 
    class_id(PK) 
} 

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

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

ho una query in SQL, che funziona bene.

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 

La query contiene sotto query nella dalla clausola di e unione funzionamento. Non riesco a convertirlo in HQL.

per favore dammi l'efficiente query HQL dalla query SQL precedente.

risposta

8

Sfortunatamente HQL does not support UNION queries. Due strategie alternative per risolvere il problema sono:

  • Mappare un Pojo to a a view
  • Or Inheritance mapping. In particolare Table per concrete class di strategia con un abstract Person superclasse ereditato sia dalla Student e Teacher sembra adattarsi bene il vostro problema:

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

Grazie per il link di documentazione. Rileggendo quelle sezioni è valsa la pena. – carbontax

7

Non è possibile inserire una sottoquery nella clausola from in HQL. Solo clausole select o where.

Problemi correlati