Cześć
W swoim zapytaniu potrzebuję wyciągnać adresy pracowników. Mam osobne tabele z pracownikami, umowami, adresami.
Algorytm wygląda w ten sposób: Jeśli możemy połączyć pracownika bezpośrednio z adresami i adres istnieje to wówczas zwracamy ten adres w zapytaniu. Jeśli zaś adres jest nullowy to powinniśmy pójść od pracownika, przez umowę i wtedy do adresu.
Ja zrobiłem to na zasadzie kilku joinów oraz case when
select
pr.Imie, pr.Nazwisko,
case when a.KodPocztowy is null then au.KodPocztowy else a.KodPocztowy end as KodPocztowy
from pracownicy pr
left join adresy a
on a.pracownikid = pr.Id
left join umowy u
on u.pracownikid = pr.id
left join adresy au
on au.umowaid = u.id
Niestety w ten sposób dostaje zdublowane rekordy (np dwa razy Jan Kowalski który raz ma null w kodzie pocztowym, a pod nim ponownie Jan Kowalski który ma poprawny kod pocztowy powiazany po umowie. Zastanawiam się jak rozwiązać ten problem