mysql - 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
解决方案
您的查询询问除了“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'
推荐阅读
- amazon-web-services - 无法将 Aurora 数据源添加到 Amplify 应用程序
- google-analytics - 我正在使用此链接在我的仪表板中显示谷歌分析,但没有显示一些错误
- android - 如何在 JetpackCompose 上更改文本的 contentDescription
- tmux - 在 tmux 中添加键绑定以进入 vi 复制模式
- angular - 在渲染时触发 onClick 在 Angular 组件中动态创建网格问题
- python - 将 pandas Excel Dataframe 复制到没有索引标题的剪贴板
- python - 在 pandas 版本 > 1.1.5 的现有 Excel 工作表中写入特定单元格中的值
- python - pysftp 读取 csv 文件有一个 etra 引用
- python - 在 Python 3.6 数据类上使用 enforce_types 时出错:没有属性 _SpecialForm
- go - 在外部资源更改上调用 kubernetes 操作员协调循环