Mysql
 sql >> Database >  >> RDS >> Mysql

SQL:errore di sintassi con intersezione?

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