在同一列中具有2个条件的多个行MySQL

时间:2019-07-08 12:29:44

标签: mysql subquery

如何在同一列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

2 个答案:

答案 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    |