Wpis z mikrobloga

#sql #programowanie

Mógłby ktoś pomóc, bo nie daje mi to spokoju. Wszystkie rozwiązania z neta po przekopiowaniu i wklejeniu dają błędny wynik.
(https://sqlzoo.net/wiki/Self_join)
Zadanie 10.

Doszedłem do czegoś takiego.

SELECT abus.num, abus.company, start.name, bbus.num, bbus.company, end.name
FROM route abus JOIN route bbus ON abus.num <> bbus.num
JOIN stops start ON abus.stop = start.id
JOIN stops end ON bbus.stop = end.id

WHERE start.name = 'Craiglockhart' AND end.name = 'Lochend'

To zapytanie znajduję poprawnie autobusy, które zatrzymują się na stacji początkowej i inne, które zatrzymują się na końcowej. Trzeba tylko znaleźć stacje przesiadkową. Jedynie na co wpadłem to :

JOIN stops trans ON abus.stop = trans.id AND bbus.stop = trans.id

Ale po dodaniu tego już całkiem nic nie znajduje. Liczę na waszą pomoc :)
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Prof_Memologii: w Polsce środek nocy, ale co tam, odświeżę sobie sqla :)
Jak dla mnie w tym zadaniu podstawową tabelą do joinów jest route, stops przyda się tylko do nazwy przystanku.
Żeby dla linii dostać początkowy i końcowy (przesiadkowy) przystanek musisz zrobić self joina z route. Czyli mając dwie linie trzeba łącznie zjoinować 4x route + jakieś stops dla nazw.

Zgodnie z hintem
  • Odpowiedz