Łączenie tabel z null

0

Witam,

Mam takie zapytanie:

SELECT     adr__Ewid.adr_Nazwa, tw__Towar.tw_Nazwa, tw__Towar.tw_IdPodstDostawca
FROM         tw__Towar LEFT OUTER JOIN
                      adr__Ewid ON adr__Ewid.adr_IdObiektu = tw__Towar.tw_IdPodstDostawca
WHERE     (adr__Ewid.adr_TypAdresu = 1)

adr_Ewid - zawiera nazwy dostawców
tw__Towar - listę towarów

Część towarów posiada NULL w tw__Towar.tw_IdPodstDostawca (po prostu nie posiada wpisanego IdPodstDostawca)

Pytanie:
Dlaczego nie pokazuje mi towarów z IdPodstDostawca = NULL?

Dziękuje za pomoc.

1

I tu rodzi sie pytanie, dlaczego ma to robić?
Jeżeli to zapytanie bierze WSZYSTKIE rekordy z tw_Towar i pasujące z adr_Ewid.

Teraz dokładasz warunek na adr__Ewid.adr_TypAdresu = 1, czyli odpadaja Ci wszystkie rekordy z tw_Towar które nie maja dopasowania bo dla tych rekordów adr_typAdresu będzie NULL-em.

Jezeli to ma łączyć tylko adresy których typ = 1 i pokazać całą resztę to masz 2 rozwiązania:

#1 Przeniść warunek do sprzężenia:

SELECT adr__ewid.adr_nazwa, 
       tw__towar.tw_nazwa, 
       tw__towar.tw_idpodstdostawca 
FROM   tw__towar 
       LEFT OUTER JOIN adr__ewid 
                    ON adr__ewid.adr_idobiektu = tw__towar.tw_idpodstdostawca
                          AND adr__ewid.adr_typadresu = 1 

lub zmienić where

SELECT adr__ewid.adr_nazwa, 
       tw__towar.tw_nazwa, 
       tw__towar.tw_idpodstdostawca 
FROM   tw__towar 
       LEFT OUTER JOIN adr__ewid 
                    ON adr__ewid.adr_idobiektu = tw__towar.tw_idpodstdostawca 
WHERE  ( adr__ewid.adr_typadresu = 1 )  or adr__ewid.adr_idobiektu is null
0

Witam,

Dziękuje za pomoc, rzeczywiście zapomniałem że warunek jest stosowany do całej tabeli i wyklucza rekordy inne niż adr_typadresu=1 siłą rzeczy pomijając towary bez dostawcy.

Dziękuje i pozdrawiam,

1 użytkowników online, w tym zalogowanych: 0, gości: 1