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 .
Като алтернатива, ако сте щастливи да имате конкатенирани типове в разделен низ, можете да извлечете желаните данни с едно преминаване:
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) .