您还可以编写 hibernate hql 或条件查询。
我有这样的教师实体和学生实体:
class Teacher {
public Long id ;
public Set<Student> students;
}
class Student {
public Long id ;
public Teacher teacher ;
public Boolean passedSemester1;
public Boolean passedSemester2;
}
您可以假设我的表具有以下结构。
教师和学生具有一对多的双向关系。 学生表管理外键。
我需要找出所有学生都通过了第 1 学期和第 2 学期的老师。 其实我还需要搜索:
都未能通过 semester1 和 semester2 , 都通过了 semester1 但没有通过 semester2 , 都没有通过 semester1 但通过了 semester2 。
你可以写任何一个这样的查询,其他的应该没有太大的区别。
为了不引起其他误解,我把我真正的问题抽象成这个简单的问题。我需要连接这两个表来做其他复杂的查询,所以它不像只查询学生表那么容易。
谢谢!
最佳答案
在 SQL 中,查找学生的两个学期都通过的教师:
SELECT teacher_id
FROM student
GROUP BY teacher_id
HAVING MIN(passed_semester_1) AND MIN(passed_semester_2)
结果:
1
4
查找其学生全部通过第 1 学期但未全部通过第 2 学期的教师:
SELECT teacher_id
FROM student
GROUP BY teacher_id
HAVING MIN(passed_semester_1) AND NOT MIN(passed_semester_2)
结果:
2
更新加入演示:
SELECT T2.*
FROM (
SELECT teacher_id
FROM student
GROUP BY teacher_id
HAVING MIN(passed_semester_1) AND MIN(passed_semester_2)
) AS T1
JOIN teacher AS T2 ON T1.teacher_id = T2.teacher_id
使用这个表结构和测试数据:
CREATE TABLE student (student_id INT NOT NULL, teacher_id INT NOT NULL, passed_semester_1 INT NOT NULL, passed_semester_2 INT NOT NULL);
INSERT INTO student (student_id, teacher_id, passed_semester_1, passed_semester_2) VALUES
(1, 1, 1, 1),
(2, 1, 1, 1),
(3, 1, 1, 1),
(4, 2, 1, 1),
(5, 2, 1, 0),
(6, 2, 1, 1),
(7, 3, 0, 1),
(8, 3, 1, 1),
(9, 4, 1, 1);
关于sql - 帮我写一个sql语句来做这样的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2392901/