我有三个表:class
,student
和teacher
table class
{
class_id(PK)
}
table student
{
student_id(PK)
class_id(PK+FK)
}
table teacher
{
teacher_id(PK)
class_id(PK+FK)
}
我在SQL中有一个查询,工作正常。
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
查询包含 from子句和 union operation 中的子查询。 我无法将其转换为HQL。
请从上面的SQL查询中给我高效的HQL查询。
答案 0 :(得分:8)
不幸的是HQL does not support UNION queries。解决问题的两种替代策略是:
或Inheritance mapping。特别是由Person
和Student
继承的抽象Teacher
超类的Table per concrete class策略似乎很适合您的问题:
select p.id, count(c)
from Person p join p.classes c
group by p.id
order by count(c) desc
答案 1 :(得分:7)
您不能在HQL中的from
子句中放置子查询。仅限select
或where
条款。