MySQL, que parece estar usando, no es compatible con INTERSECT
sintaxis. Vas a tener que resolverlo de otra manera.
En este caso, es trivial -solo necesitamos una lista de todos los proveedores que ofrecen "verde" y "rojo" de alguna parte- su consulta no molesta para ver si las partes en sí están relacionadas, por lo que podemos resolverlo con bastante facilidad. así:
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, no creo que la consulta original sea un INTERSECT
típico. problema. Echa un vistazo a JOIN
solución ofrecida por Vinko Vrsalovic para una solución general para emular el INTERSECT
(que, por cierto, preferiría incluso si el RDBMS de hecho ofreciera INTERSECT
de forma nativa).