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

标签 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; 
}

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

教师和学生具有一对多的双向关系。 学生表管理外键。

我需要找出所有学生都通过了第 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/

相关文章:

mysql - 使用查询结果对查询进行计数

sql - SQL 查询中的汇总和总发票数据

oracle - 删除带有全局索引的分区表?

SQL:删除所有可用表中的所有数据

database - haskell "persistent"模型 : How to correctly define cross-reference?

Oracle PL/SQL 存储过程编译器与 PostgreSQL PGSQL 存储过程编译器

java - 需要java API来解析SQL语句

SQL 查询查找从日期 x 到日期 y 的可用房间

database - 如何从另一台计算机连接到本地主机

python - SQLAlchemy - 当 count() 说还有更多结果时只返回一个结果