MySQL, které zřejmě používáte, nepodporuje INTERSECT
syntax. Budete to muset vyřešit jinak.
V tomto případě je to triviální -potřebujeme pouze seznam všech dodavatelů, kteří nabízejí "zelené" a "červené" některého dílu- Váš dotaz nás neobtěžuje zjistit, zda spolu díly samy souvisí, takže to vyřešíme celkem snadno takhle:
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
Osobně si nemyslím, že původní dotaz je typickým INTERSECT
problém. Podívejte se na JOIN
řešení nabízené Vinkem Vrsalovićem pro obecné řešení emulace INTERSECT
(což bych btw preferoval, i když by RDBMS ve skutečnosti nabízel INTERSECT
nativně).