MySQL, che sembra che tu stia utilizzando, non supporta INTERSECT
sintassi. Dovrai risolverlo in un altro modo.
In questo caso, è banale -abbiamo solo bisogno di un elenco di tutti i fornitori che offrono "verde" e "rosso" di alcune parti- la tua domanda non si preoccupa di vedere se le parti stesse sono correlate, quindi possiamo risolverlo abbastanza facilmente così:
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
Personalmente, non credo che la query originale sia un tipico INTERSECT
problema. Dai un'occhiata a JOIN
soluzione offerta da Vinko Vrsalovic per una soluzione generale per emulare INTERSECT
(che tra l'altro preferirei anche se l'RDBMS offrisse effettivamente INTERSECT
nativamente).