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')
Guardalo su sqlfiddle .
In alternativa, se sei felice di avere i tipi concatenati in una stringa delimitata, puoi estrarre i dati desiderati in un unico passaggio:
SELECT ID, GROUP_CONCAT(TYPE)
FROM types
WHERE COLOR IN ('Red', 'Blue')
GROUP BY ID
HAVING COUNT(*) = 2
Guardalo su sqlfiddle .
Nota che, se la tua tabella può contenere più record con lo stesso (ID, COLOR)
coppia, dovresti sostituire COUNT(*)
con il più costoso COUNT(DISTINCT COLOR)
.