只有 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, C
的 colA 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
我有一个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, C
的 colA 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