mysql - 仅选择具有匹配列表列值的一行
问题描述
我有一个表结构
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
解决方案
考虑使用聚合:
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
推荐阅读
- python - 如何导入第 3 方 python 库以与胶水 python shell 脚本一起使用
- mysql - 如何在中间使用查询字符串?内克斯
- asp.net - Sentry/NLog 集成不记录到 Sentry
- javascript - 检查 div 是否为空,并将另一个 div 的内容显示为字符串
- python - 在 python 中将 .doc 文件转换为 .docx 文件的快速方法
- c# - MultiColumnComboBox 中的 SelectedItem 为 Null
- c# - EF Core - 不要在查询中包含导航属性
- tensorflow - 在 PyCharm 中导入 tensorflow_hub
- python - 在 Google API(凭据)中列出文件的问题
- time-series - 如何创建这种类型的循环?