2

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

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 左右)。我应该注意,类型与颜色无关,因此使问题与其他 stackoverflow 问题以及这个问题不同。

我想我需要做一个子查询。但是真的不知道如何进行,谢谢。

4

1 回答 1

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')

sqlfiddle上查看。

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

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

sqlfiddle上查看。

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

于 2012-11-08T23:26:14.740 回答