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)
.