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 でご覧ください 。
または、タイプを区切り文字列に連結して問題がない場合は、1回のパスで目的のデータを抽出できます。
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)
。