sql - 返回 student_ids,其中每个类别至少有一个

标签 sql oracle

假设我们有三个表 students、assignments 和 subjects。我想返回所有 student_id,其中该学生在每个科目中至少完成了一个名为 first_name = 'place' 和 last_name = 'holder' 的学生所拥有的作业。

学生表:

Student_id | first_name | last_name
------------------------------------
     1     |   place    | holder
     2     |            |           
     3     |            |

主题:

subject_id | name
-----------------
     1     | Math
     2     | English
     3     | Science

作业:

student_id | subject_id
-----------------------
     1     |    1
     1     |    2
     1     |    3
     2     |    1
     2     |    2
     2     |    3
     3     |    1
     3     |    2

所以,在这种情况下,我希望我的查询结果是:

student_id
----------
     1
     2

我已经尝试了很多不同的方法,比如使用集合操作和类似的东西,但似乎没有一个能得到完全正确的结果。我不断让所有学生在学生“占位符”已完成作业的任何科目中至少完成一项作业。

最佳答案

您可以使用 SQL Join 获得所需的结果。假设每个主题只有一个作业:

SELECT students.student_id FROM students
INNER JOIN assignments on assignments.student_id = students.student_id
GROUP BY students.student_id
HAVING COUNT(*) = (SELECT COUNT(*) FROM subjects)

关于sql - 返回 student_ids,其中每个类别至少有一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54700522/

相关文章:

sql - 带有变量但没有 "SELECT"的简单 "INTO"

sql - 要么在 select sql 中的 not both 子句中

Oracle 的 MySQL 等效 session 变量

sql - 检查时间范围是否覆盖 Postgres 中的 now()

sql - Oracle SQL,是否可以在嵌套选择中使用用户定义的数据类型属性?

Java EE 7 updatetool 安装失败

java.sql.SQLException : ORA-00257: Archiver error. 仅连接为 SYSDBA,直至解决

c# - 列 <列名> 不属于表

sql - 基于存储过程参数的条件 where 子句?

mysql - 1000万行的2gb表,后期分页选择很慢