sql >> Databasteknik >  >> RDS >> Mysql

SQL:Syntaxfel med intersect?

MySQL, som du verkar använda, stöder inte INTERSECT syntax. Du måste lösa det på ett annat sätt.

I det här fallet är det trivialt -vi behöver bara en lista över alla leverantörer som erbjuder "grönt" och "rött" av någon del- din fråga bryr sig inte om att se om delarna i sig är relaterade, så vi kan lösa det ganska enkelt så här:

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

Personligen tror jag inte att den ursprungliga frågan är en typisk INTERSECT problem. Ta en titt på JOIN lösning som erbjuds av Vinko Vrsalovic för en allmän lösning för att emulera INTERSECT (vilket jag förresten skulle föredra även om RDBMS faktiskt skulle erbjuda INTERSECT inbyggt).



  1. Varför matchar _ (understreck) - (bindestreck)?

  2. Hur man väljer ett kolumnnamn med ett mellanslag i MySQL

  3. MySQL UPPDATERA villkorligt radernas booleska kolumnvärden baserat på en vitlista med id

  4. SQLite introducerar UNIXEPOCH()-funktionen