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')
Véalo en sqlfiddle .
Alternativamente, si está feliz de tener los tipos concatenados en una cadena delimitada, puede extraer los datos deseados en un solo paso:
SELECT ID, GROUP_CONCAT(TYPE)
FROM types
WHERE COLOR IN ('Red', 'Blue')
GROUP BY ID
HAVING COUNT(*) = 2
Véalo en sqlfiddle .
Tenga en cuenta que, si su tabla puede contener varios registros con el mismo (ID, COLOR)
par, debe reemplazar COUNT(*)
con el COUNT(DISTINCT COLOR)
más caro .