Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL:Błąd składni z przecięciem?

MySQL, którego prawdopodobnie używasz, nie obsługuje INTERSECT składnia. Będziesz musiał rozwiązać to w inny sposób.

W tym przypadku jest to trywialne - potrzebujemy tylko listy wszystkich dostawców, którzy oferują "zielone" i "czerwone" jakiejś części - Twoje zapytanie nie zawraca sobie głowy sprawdzeniem, czy same części są ze sobą powiązane, więc możemy to dość łatwo rozwiązać tak:

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

Osobiście nie wierzę, że oryginalne zapytanie jest typowym INTERSECT problem. Spójrz na JOIN rozwiązanie oferowane przez Vinko Vrsalovica dla ogólnego rozwiązania do emulacji INTERSECT (co wolałbym btw, nawet jeśli RDBMS faktycznie oferowałby INTERSECT natywnie).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pola którego wiersza są zwracane podczas grupowania z MySQL?

  2. Jak przekonwertować czas MySQL

  3. Jak zaprogramować wyzwalacz MySQL, aby wstawić wiersz do innej tabeli?

  4. Wstawianie MySQL z pętlą while

  5. jak stworzyć pole obliczeniowe w mysql?