MySQL, którego prawdopodobnie używasz, nie obsługuje INTERSECT
składnia. Będziesz musiał rozwiązać to w inny sposób.
W tym przypadku jest to trywialne - potrzebujemy tylko listy wszystkich dostawców, którzy oferują "zielone" i "czerwone" jakiejś części - Twoje zapytanie nie zawraca sobie głowy sprawdzeniem, czy same części są ze sobą powiązane, więc możemy to dość łatwo rozwiązać tak:
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
Osobiście nie wierzę, że oryginalne zapytanie jest typowym INTERSECT
problem. Spójrz na JOIN
rozwiązanie oferowane przez Vinko Vrsalovica dla ogólnego rozwiązania do emulacji INTERSECT
(co wolałbym btw, nawet jeśli RDBMS faktycznie oferowałby INTERSECT
natywnie).