首页 > 解决方案 > 使用 Hibernate 和 Oracle 仅选择那些与参考表中所有给定条件匹配的记录

问题描述

我有表 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 来实现这个结果?

标签: oraclehibernate

解决方案


另外,我们如何使用纯 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;

推荐阅读