Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL-AND-Abfrage, die in derselben Spalte erfüllt werden soll

Weil stop_id können nicht zwei verschiedene Werte in derselben Zeile sein.

Aggregation ist eine Möglichkeit, das zu tun, was Sie wollen:

SELECT b.bus_name
FROM buses b JOIN
     route_connect rc
     ON rc.busid = b.id JOIN
     stops s
     ON s.id = rc.stop_id
GROUP BY b.bus_name
HAVING SUM( s.stop_name = 'Sydney' ) > 0 AND
       SUM( s.stop_name = 'Melbourne' ) > 0;

Dies gibt Busse zurück, die Haltestellen mit dem Namen beider Städte haben.

Angesichts der Tatsache, dass Busse viele Haltestellen haben können, ist es möglicherweise effizienter, Folgendes zu tun:

SELECT b.bus_name
FROM buses b JOIN
     route_connect rc
     ON rc.busid = b.id JOIN
     stops s
     ON s.id = rc.stop_id
WHERE s.stop_name in ('Sydney', 'Melbourne')
GROUP BY b.bus_name
HAVING COUNT(DISTINCT s.stop_name) = 2;