Questa è la mia domanda:SQL: errore di sintassi con intersect?
-- Sids of suppliers who supply a green part AND a red part
(SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color = "red")
INTERSECT
(SELECT Suppliers.sid
FROM Suppliers
JOIN Catalog ON Catalog.sid = Suppliers.sid
JOIN Parts ON Parts.pid = Catalog.pid
WHERE Parts.color = "green");
Questo è l'errore:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "INTERSECT (SELECT Suppliers.sid FROM Suppliers JOIN Catalog ON Catalog.sid = Sup" on line 6.
Che cosa sto facendo di sbagliato?
Questo è lo schema:
Fornitori (sid: interi, sname: stringa, stringa di indirizzo)
Parti (PID: interi, pname: stringa, colore: String)
catalogo (SID: integer, PID: integer, costo: vero e proprio)
grassetto = chiave primaria
Sarebbe interessante vedere quale è più veloce, questa query o la mia query - penso che si riduca a che è più veloce, un 2 ° join o un gruppo per operazione. – Hogan
@Hogan, * shrug *. Questo dipende da così tante cose: indici, quale motore, quante righe, quante memorie. elenco infinito ... se la domanda sarebbe stata quella di trovare la soluzione più veloce, avrei adottato un approccio completamente diverso per rispondere a questa domanda. Per ora, sono nella modalità di: come riscrivere SQL standard per ottenere un risultato equivalente nel caso in cui MySQL non accetti di supportare la sintassi. –
punto preso, credo di essere sempre nella modalità di ciò che è più veloce, non è quello che è più chiaro. – Hogan