首页 > 解决方案 > 仅选择具有匹配列表列值的一行

问题描述

我有一个表结构

colA | colB
--------------
1    | A
1    | B
1    | C
2    | X
2    | B
2    | C
3    | Y
3    | B
3    | X

我怎样才能得到colA return = 2条件WHERE colB are X, B, C?我尝试使用它SELECT colA FROM table WHERE colB IN ('X','B','C'),但结果是1,1,2,2,2,3,3

标签: mysqlsqlcountwhere-clausehaving-clause

解决方案


考虑使用聚合:

select a
from mytable 
group by a
having
    sum(b = 'B') >= 1
    and sum(b = 'C') >= 1
    and sum(b = 'X') >= 1

这将为您提供 a 列的值,其中至少存在一条记录,其中 b 列的值为“B”,一个为值“C”,一个为值“X”。

您可以使其更具限制性,例如,如果您希望 b 中除了 'A'、'B'、'X' 之外没有其他可能的值:

select a
from mytable 
group by a
having
    sum(b = 'B') = 1
    and sum(b = 'C') = 1
    and sum(b = 'X') = 1
    and count(*) = 3

推荐阅读