提问者:小点点

仅选择具有匹配列表列值[重复]的一行


我有一个表格结构

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

如何使用条件获得cola return=2,其中colB是X,B,c?我尝试使用这个select colA FROM table WHERE colB IN('x','b','c'),但结果是1,1,2,2,2,3,3


共1个答案

匿名用户

考虑使用聚合:

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