10

我有三个表:classstudentteacher

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 子句联合操作中包含子查询。我无法将其转换为 HQL。

请从上述 SQL 查询中给我高效的 HQL 查询。

4

2 回答 2

8

不幸的是HQL 不支持 UNION 查询。解决您的问题的两种替代策略是:

  • 将 Pojo映射到 aa 视图
  • 继承映射。特别是每个具体类策略的表,其中抽象Person超类继承自Student并且Teacher似乎很适合您的问题:

    select p.id, count(c)
    from Person p join p.classes c
    group by p.id
    order by count(c) desc
    
于 2013-01-03T16:27:02.077 回答
7

您不能from在 HQL 的子句中放置子查询。只有selectorwhere子句。

于 2013-01-03T15:04:01.543 回答