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