假设我们有三个表 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/