【问题标题】:Select rows that match several conditions选择符合多个条件的行
【发布时间】:2016-11-06 10:37:59
【问题描述】:

我有一张桌子pupil_teachers 像这样

+------+----------+------------+
| id   | pupil_id | teacher_id |
+------+----------+------------+
| 1    | 100      | 200        | 
| 2    | 101      | 200        |  
| 3    | 102      | 200        |
| 4    | 102      | 201        |
| 5    | 101      | 201        |
| 6    | 101      | 202        | 
| 7    | 103      | 200        | 
+------+----------+------------+

查询将检索学生 100、101 和 102 共有的所有教师。所以在这种情况下,它只会是 id 为 200 的老师。

103 号学生也有 id 为 200 的老师,但不是查询的一部分,我只想查询 100、101 和 102 号学生。

所以它会开始:

SELECT teacher_id
FROM pupil_teachers
WHERE 

我真的不知道下一步该去哪里。显然以下是不正确的

SELECT teacher_id
FROM pupil_teachers
WHERE pupil_id IN (100, 101, 102)

【问题讨论】:

    标签: sql


    【解决方案1】:

    这是使用Group ByHaving 子句的一种方式

    SELECT teacher_id
    FROM pupil_teachers
    WHERE pupil_id IN (100, 101, 102)
    Group by teacher_id
    Having Count(Distinct pupil_id) = 3
    

    另一种方式

    SELECT teacher_id
    FROM pupil_teachers
    Group by teacher_id
    Having Count(Case when pupil_id  = 100 then 1 end) > 0  
       AND Count(Case when pupil_id  = 101 then 1 end) > 0 
       AND Count(Case when pupil_id  = 102 then 1 end) > 0
    

    【讨论】:

    • 非常感谢!像魅力一样工作。我确实找到了与您的第一个类似的解决方案,尝试过,但我必须有某种错误,因为它不起作用,哈哈。谢谢!我会尽快接受!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多