- główna: osoby(id, miasto, stanowisko, status)
- słownikowe: miasta, stanowiska i statusy
W tabeli miasto może nie być wpisu odpowiadającemu kluczowi w tabeli osoby w polu miasto.
Zatem, żeby wyświetlić wszystkie osoby, które nie mają odpowiadającego miasta chciałbym tu zastosować left join.
Mam więc na początek zapytanie w stylu:
SELECT T1.*, T2.miasto FROM `osoby` AS T1 LEFT JOIN miasta AS T2 ON T1.miasto = T2.id
Problem pojawia się, gdy chcę jeszcze dołożyć powiązanie z tabelami stanowiska i statusy na podobnej zasadzie jak miasta, z tą różnicą, że w tych dwóch tabelach zawsze będzie odpowiedni rekord.
Próbowałem:
SELECT T1.*, T2.miasto, T3.stanowisko FROM `osoby` AS T1 LEFT JOIN miasta AS T2, stanowiska AS T3 ON T1.miasto = T2.id AND T1.stanowisko = T3.id
i podobne kombinacje (np. tabela T3 przed joinem) ale nic nie działa.
Macie pomysł jak to ugryźć?
Ok, już sobie poradziłem:
SELECT T1.*, T2.miasto, T3.stanowisko, T4.STATUS FROM `osoby` AS T1 LEFT JOIN miasta AS T2 ON T1.miasto = T2.id LEFT JOIN stanowiska AS T3 ON T1.stanowisko = T3.id LEFT JOIN statusy AS T4 ON T1.STATUS = T4.id