mysql - 选择记录不在记录集中
问题描述
student
桌子
|----------------------|
| student_id | name |
|------------|---------|
| 1 | Richard |
| 2 | Emily |
| 3 | Hans |
|------------|---------|
lecturer
桌子
|--------------------|
| lecturer_id | name |
|-------------|------|
| 1 | John |
| 2 | Mike |
|-------------|------|
classes
桌子
|-----------------------------------------------|
| class_id | lecturer_id | material |
|----------|-------------|----------------------|
| 1 | 1 | Basic of algorithm |
| 2 | 1 | Basic of programming |
| 3 | 2 | Database Essentials |
| 4 | 2 | Basic of SQL |
|----------|-------------|----------------------|
attendance
桌子
|-----------------------|
| class_id | student_id |
|----------|------------|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| 2 | 2 |
| 3 | 1 |
| 3 | 2 |
| 3 | 3 |
| 4 | 1 |
| 4 | 2 |
|----------|------------|
如何在 MySQL 中显示 Hans(学生)未参加的课程记录(来自课程表)?
期望的结果:
|-----------------------------------------------|
| class_id | lecturer_id | material |
|----------|-------------|----------------------|
| 2 | 1 | Basic of programming |
| 4 | 2 | Basic of SQL |
|----------|-------------|----------------------|
解决方案
一种方法使用EXISTS
:
SELECT c.class_id, c.lecturer_id, c.material
FROM classes c
WHERE NOT EXISTS (SELECT 1 FROM attendance a
INNER JOIN student s
ON a.student_id = s.student_id
WHERE a.class_id = c.class_id AND
s.name = 'Hans');
推荐阅读
- amazon-web-services - 向 aws 公共 IP 公开 openshift 服务
- apache-spark - Spark 历史服务器 403 访问
- python - 有没有办法用匹配的键将两个字典的对应值相互划分?
- python - 正则表达式 - 按句点拆分(St. 除外)
- merge - 合并具有日期值的行并删除具有所有 NULL 日期的行
- python - 如何使用 openpyxl 确定 Excel 工作表是否不包含任何值?
- java - 使用片段时 Intellij 无法正确识别 Thymeleaf 模型变量
- firebase-realtime-database - 在 FirebaseDB 中对每天变化的班次进行建模
- google-cloud-platform - 我可以阻止 GCE Enforcer 删除 VPC 规则吗?
- sql - 如何使用 2 Where 条件与 Update