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')
Voir sur sqlfiddle .
Alternativement, si vous souhaitez que les types soient concaténés dans une chaîne délimitée, vous pouvez extraire les données souhaitées en une seule passe :
SELECT ID, GROUP_CONCAT(TYPE)
FROM types
WHERE COLOR IN ('Red', 'Blue')
GROUP BY ID
HAVING COUNT(*) = 2
Voir sur sqlfiddle .
Notez que, si votre table peut contenir plusieurs enregistrements avec le même (ID, COLOR)
paire, vous devez remplacer COUNT(*)
avec le plus cher COUNT(DISTINCT COLOR)
.