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

Kei*_*ith 2 mysql sql select

我将不胜感激任何创建此查询的帮助.我没试过好几种方法.由于我的问题对我来说有点困难,我将简单举例说明我想做什么.我的数据结构与以下内容类似:

ID  TYPE  COLOR
1   A     Blue
1   B     Red
1   C     Green
2   C     Blue 
2   B     Green 
Run Code Online (Sandbox Code Playgroud)

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

1, A , B 
Run Code Online (Sandbox Code Playgroud)

返回A和B的顺序并不重要.数据集很大,我希望很多ID都符合这两个条件(可能是50,000左右).我应该注意,该类型与颜色无关,因此使问题与其他stackoverflow问题不同,以及这个问题.

我想我需要做某种子查询.但真的不知道该怎么办,谢谢.

egg*_*yal 5

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')
Run Code Online (Sandbox Code Playgroud)

sqlfiddle上看到它.

或者,如果您乐意将类型连接成分隔字符串,则可以一次性提取所需数据:

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

sqlfiddle上看到它.

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