MySQL, das Sie anscheinend verwenden, unterstützt INTERSECT
nicht Syntax. Du musst es anders lösen.
In diesem Fall ist es trivial - wir brauchen nur eine Liste aller Lieferanten, die "grüne" und "rote" Teile anbieten - Ihre Anfrage kümmert sich nicht darum, zu sehen, ob die Teile selbst verwandt sind, also können wir sie ganz einfach lösen so:
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
Ich persönlich glaube nicht, dass die ursprüngliche Abfrage ein typischer INTERSECT
ist Problem. Sehen Sie sich den JOIN
an von Vinko Vrsalovic angebotene Lösung für eine allgemeine Lösung zur Emulation des INTERSECT
(was ich übrigens bevorzugen würde, selbst wenn das RDBMS tatsächlich INTERSECT
anbieten würde nativ).