【发布时间】:2021-12-05 03:22:41
【问题描述】:
我有 3 张桌子:
- 学生桌
| id | name |
|---|---|
| 1 | Jhon |
| 2 | Emma |
| 3 | Oliver |
- 类表
| id | name |
|---|---|
| 1 | Math |
| 2 | Science |
- 考勤表
| id | student_id | class_id |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
我尝试编写一个 SQL 查询来检索同时参加数学和科学课程的学生:
SELECT s.id, s.name
FROM attendance a
INNER JOIN students s ON a.student_id = s.id
WHERE a.class_id IN (1,2);
上面的代码结果是
| id | name |
|---|---|
| 1 | Jhon |
| 2 | Emma |
| 1 | Jhon |
但艾玛只上数学课。
我知道这种行为是因为WHERE IN,它与WHERE a.class_id = 1 OR a.class_id = 2 相同。
但是我应该怎么做才能得到预期的结果,哪个是“Jhon”或只有 Jhon 的 ID,因为他是唯一一个参加数学和科学课程的人?
【问题讨论】:
-
我建议使用聚合:
COUNT、GROUP BY和HAVING,除了你已有的。
标签: sql