帮我写一个sql语句来做这样的事情

Saw*_*yer 5 sql database oracle hibernate

您还可以编写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; 
}
Run Code Online (Sandbox Code Playgroud)

您可以假设我的表具有以下结构.

老师和学生有一对一的双向关系.学生表管理外键.

我需要找出那些学生都通过第一学期和第二学期的教师.其实我还需要搜索:

所有都未能通过semester1和semester2,所有都通过了第二学期但未通过第二学期,都未通过第二学期但通过了第二学期.

您可以编写任何一个查询,其他人应该没有太大的区别.

为了不引起其他误解,我将我的真实问题抽象为这个简单的问题.我需要加入这两个表来进行其他复杂的查询,因此查询学生表并不容易.

谢谢 !

Mar*_*ers 1

在 SQL 中,查找学生全部通过两个学期的老师:

SELECT teacher_id
FROM student
GROUP BY teacher_id
HAVING MIN(passed_semester_1) AND MIN(passed_semester_2)
Run Code Online (Sandbox Code Playgroud)

结果:

1
4
Run Code Online (Sandbox Code Playgroud)

要查找其学生全部通过第 1 学期但未全部通过第 2 学期的教师:

SELECT teacher_id
FROM student
GROUP BY teacher_id
HAVING MIN(passed_semester_1) AND NOT MIN(passed_semester_2)
Run Code Online (Sandbox Code Playgroud)

结果:

2
Run Code Online (Sandbox Code Playgroud)

更新加入演示:

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
Run Code Online (Sandbox Code Playgroud)

使用此表结构和测试数据:

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);
Run Code Online (Sandbox Code Playgroud)