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')
Zobacz go na sqlfiddle .
Alternatywnie, jeśli jesteś zadowolony, że typy są połączone w rozdzielany ciąg, możesz wyodrębnić żądane dane w jednym przebiegu:
SELECT ID, GROUP_CONCAT(TYPE)
FROM types
WHERE COLOR IN ('Red', 'Blue')
GROUP BY ID
HAVING COUNT(*) = 2
Zobacz na sqlfiddle .
Pamiętaj, że jeśli Twoja tabela może zawierać wiele rekordów z tym samym (ID, COLOR)
parę, należy zastąpić COUNT(*)
z droższym COUNT(DISTINCT COLOR)
.