只有 select 行匹配列表列值

Only select one row with matches list column value

我有一个table结构

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

如何获得条件为 WHERE colB are X, B, CcolA return = 2 ?我尝试使用这个 SELECT colA FROM table WHERE colB IN ('X','B','C'),但结果是 1,1,2,2,2,3,3

考虑使用聚合:

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