MySQL, que você parece estar usando, não suporta o
INTERSECT
sintaxe. Você vai ter que resolver de outra forma. Neste caso, é trivial - precisamos apenas de uma lista de todos os fornecedores que oferecem "verde" e "vermelho" de alguma peça - sua consulta não se incomoda em ver se as próprias peças estão relacionadas, para que possamos resolvê-lo com bastante facilidade assim:
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
Pessoalmente, não acredito que a consulta original seja um típico
INTERSECT
problema. Dê uma olhada no JOIN
solução oferecida por Vinko Vrsalovic para uma solução geral para emular o INTERSECT
(o que eu preferiria, mesmo que o RDBMS oferecesse de fato INTERSECT
nativamente).