在Hibernate和Oracle的参考表中仅选择那些匹配所有给定条件的记录

时间:2018-05-29 03:50:53

标签: oracle hibernate

我有表Student(std_id,std_name),Subject(sub_id,sub_name)和一个映射表Sudent_Subject(std_id,sub_id)

想要获取所有学生的名单,只有主题是数学和科学,而不是除了这个科目或不低于给定的科目。

在这种情况下,我已经使用hibernate配置了上面的表。这是必需的POJO

    Class Student {
        private String std_id;
        private String std_name;
        List<Subject> lstSubject;
    }

    Class Subject {
        private String sub_id;
        private String sub_name;
        List<Student> lstStudent;
    }

是否可以编写HQL以获得所需的结果?另外,我们如何使用纯SQL实现此结果?

1 个答案:

答案 0 :(得分:1)

  

另外,我们如何使用纯SQL实现此结果?

您可以使用HAVING子句:

SELECT s.std_id, s.name
FROM Student s
JOIN Student_Subject ss
  ON s.std_id = ss.std_id
JOIN Subject sb
  ON sb.sub_id = ss.sub_id
GROUP BY s.std_id, s.name
HAVING COUNT(*) = 2
   AND COUNT(CASE WHEN sb.sub_name IN ('Math', 'Science') THEN 1 END) = 2;