小编典典

MySQL查询查找一列满足多个条件的ID

sql

我将不胜感激创建此查询的任何帮助。我尝试了好几种方法,但都没有碰到运气。由于我的问题很难表达,因此我将举一个我想做的简单例子。我的数据在结构上类似于以下内容:

ID  TYPE  COLOR
1   A     Blue
1   B     Red
1   C     Green
2   C     Blue 
2   B     Green

如果我有两种特定颜色的ID,我想创建一个查询以返回类型。例如,我想查找所有具有蓝色和红色的ID。然后查询将返回:

1, A , B

A和B的返回顺序并不重要。数据集很大,我希望有许多ID可以同时满足这两个条件(也许是50,000个左右)。我要指出的是,类型不相关颜色从而使来自不同的问题

我想我需要做某种子查询。但真的不知道该如何进行,谢谢。


阅读 204

收藏
2021-04-28

共1个答案

小编典典

SELECT ID, TYPE FROM types NATURAL JOIN (
SELECT ID FROM types GROUP BY ID HAVING SUM(COLOR=’Red’) AND SUM(COLOR=’Blue’)
) t WHERE COLOR IN (‘Red’, ‘Blue’)

sqlfiddle上看到它。

另外,如果您很乐意将类型连接成一个定界的字符串,则可以通过一次传递来提取所需的数据:

SELECT   ID, GROUP_CONCAT(TYPE)
FROM     types
WHERE    COLOR IN ('Red', 'Blue')
GROUP BY ID
HAVING   COUNT(*) = 2

sqlfiddle上看到它。

请注意,如果您的表可能包含多个具有相同(ID, COLOR)对的记录,则应替换COUNT(*)为更昂贵的COUNT(DISTINCTCOLOR)

2021-04-28