如何在同一列MySQL中选择2个条件的多行
学生桌:
id name
1 Jhon
2 Anne
3 Charles
4 Bob
lesson_contract的表:
id lesson_code student_id
1 L1 1
2 L2 1
3 L1 2
4 L1 3
5 L2 3
6 L2 4
因此,我想让同时接受lesson_code L1和L2的学生。结果应该是Jhon和Charles
答案 0 :(得分:0)
您可以通过两次进入lesson_contract
表来完成此操作,每个课程代码一次:
SELECT s.id, s.name FROM students s
INNER JOIN lesson_contract l1
ON s.id = l1.student_id AND l1.lesson_code = 'L1'
INNER JOIN lesson_contract l2
ON s.id = l2.student_id AND l2.lesson_code = 'L2'
内部联接将过滤结果,因此您只会获得同时满足两个联接条件的行。
答案 1 :(得分:0)
您必须加入表group by name
并将条件放在having
子句中:
select s.name
from student s inner join lesson_contract l
on l.student_id = s.id
where l.lesson_code in ('L1', 'L2')
group by s.name
having count(distinct l.lesson_code) = 2
如果没有理由让学生两次上同一堂课,则可以删除distinct
。
请参见demo。
结果:
| name |
| ------- |
| Charles |
| John |