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')
Veja em sqlfiddle .
Como alternativa, se você estiver satisfeito em ter os tipos concatenados em uma string delimitada, poderá extrair os dados desejados em uma única passagem:
SELECT ID, GROUP_CONCAT(TYPE)
FROM types
WHERE COLOR IN ('Red', 'Blue')
GROUP BY ID
HAVING COUNT(*) = 2
Veja em sqlfiddle .
Observe que, se sua tabela pode conter vários registros com o mesmo
(ID, COLOR)
par, você deve substituir COUNT(*)
com o mais caro COUNT(DISTINCT COLOR)
.