首页 > 解决方案 > SQL - 检查一组相似记录中的任何记录是否与 ID 匹配

问题描述

我想让那些没有上过任何杰伊教过的课程的学生。从下表中可以看出,所有学生至少有一门课程由 Jay 教授。因此,查询需要返回空。

学生

学生卡 姓名
s001 菲尔
s002 克莱尔

讲师

讲师编号 姓名
t001 周杰伦
t002 格洛丽亚

课程

course_id 姓名 讲师编号
c001 数学 t001
c002 艺术 t002

注册

学生卡 course_id
s001 c001
s001 c002
s002 c001

我的查询

SELECT s.*
FROM student AS s
JOIN enroll AS e ON s.student_id = e.student_id
WHERE e.course_id NOT IN ("c001")

我得到了什么

学生卡 姓名
s001 菲尔

我的期望

我希望它会返回空记录,因为 Phil ( s001) 参加了 Jay 教授的课程。因为他有两门课程,其中有 Gloria 作为讲师,所以它返回了 Phil。我不确定如何检查一组相似记录(相同student_id,不同course_id)中的任何记录是否匹配某个course_id

标签: mysqlsql

解决方案


您的查询询问除了“c001”之外哪些学生有课程,这是一个不同的问题。而不是考虑集合,我想看到除了参加“c001”课程的学生之外的所有学生:

select name
from student
where student_id not in (
  select student_id from enroll where course_id = 'c001'
)

我为您创建了在db-fiddle.com上运行该查询所需的最小架构。

下一步是用讲师姓名(未经测试)的条件替换内部查询:

select student_id
from lecturer
join course using (lecturer_id)
join enroll using (course_id)
where lecturer.name = 'Jay'

推荐阅读