Ponieważ stop_id
nie może być dwóch różnych wartości w tym samym wierszu.
Agregacja to jeden ze sposobów na to, co chcesz:
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;
Spowoduje to zwrócenie autobusów, które mają przystanki z nazwami obu miast.
Biorąc pod uwagę, że autobusy mogą mieć wiele przystanków, bardziej efektywne może być wykonanie:
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;