MySQL, som du ser ud til at bruge, understøtter ikke INTERSECT
syntaks. Du bliver nødt til at løse det på en anden måde.
I dette tilfælde er det trivielt - vi mangler kun en liste over alle leverandører, der tilbyder "grøn" og "rød" af en eller anden del- din forespørgsel gider ikke se, om delene i sig selv hænger sammen, så vi kan løse det ret nemt sådan her:
SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color IN ('red', 'green')
GROUP BY Suppliers.sid
HAVING COUNT(DISTINCT Parts.color) = 2
Personligt tror jeg ikke, at den oprindelige forespørgsel er en typisk INTERSECT
problem. Tag et kig på JOIN
løsning tilbudt af Vinko Vrsalovic til en generel løsning til at emulere INTERSECT
(hvilket jeg forresten ville foretrække, selvom RDBMS'en faktisk ville tilbyde INTERSECT
oprindeligt).