我将不胜感激创建此查询的任何帮助。我尝试了好几种方法,但都没有碰到运气。由于我的问题很难表达,因此我将举一个我想做的简单例子。我的数据在结构上类似于以下内容:
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个左右)。我要指出的是,类型不相关颜色从而使来自不同的问题
我想我需要做某种子查询。但真的不知道该如何进行,谢谢。
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
请注意,如果您的表可能包含多个具有相同(ID, COLOR)对的记录,则应替换COUNT(*)为更昂贵的COUNT(DISTINCTCOLOR)。
(ID, COLOR)
COUNT(*)
COUNT(DISTINCTCOLOR)