Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL:Erro de sintaxe com interseção?


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).