Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête MYSQL AND à satisfaire sur la même colonne

Parce que stop_id ne peut pas être deux valeurs différentes dans la même ligne.

L'agrégation est une façon de faire ce que vous voulez :

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;

Cela renvoie les bus dont les arrêts portent le nom des deux villes.

Étant donné que les bus peuvent avoir de nombreux arrêts, il serait peut-être plus efficace de :

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;