MySQL, som du verkar använda, stöder inte INTERSECT
syntax. Du måste lösa det på ett annat sätt.
I det här fallet är det trivialt -vi behöver bara en lista över alla leverantörer som erbjuder "grönt" och "rött" av någon del- din fråga bryr sig inte om att se om delarna i sig är relaterade, så vi kan lösa det ganska enkelt så här:
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
Personligen tror jag inte att den ursprungliga frågan är en typisk INTERSECT
problem. Ta en titt på JOIN
lösning som erbjuds av Vinko Vrsalovic för en allmän lösning för att emulera INTERSECT
(vilket jag förresten skulle föredra även om RDBMS faktiskt skulle erbjuda INTERSECT
inbyggt).