Cześć,
mam takiego joina:
i dostaję:
czyli pole ID2 jest puste.
Jak mozna wskazać accessowi, że ma też łączyć po pustych polach?
table są identyczne tylko mamy nulle.
Cześć,
mam takiego joina:
i dostaję:
czyli pole ID2 jest puste.
Jak mozna wskazać accessowi, że ma też łączyć po pustych polach?
table są identyczne tylko mamy nulle.
Sprawdź czy jest Null i jak tak zamień na coś np na pusty ciąg "". Zrób to po obu stronach (tj. w obu tabelach. I będzie OK.
Edit: dodatkowa podpowiedź - u żyj funkcji nz()
czesc!
Czy to jest dobre podejscie i czesto uzywane?
Hmm nie do końca rozumiem pytanie :| - IMHO nie ma innej metody jeśli chcesz osiągnąć to co chcesz ... czyli porównywać null'e w 2 tablicach.
Ale poczekaj, może ktoś mądrzejszy Tobie opowie dokładniej.
Edit: A czy to dobre podejście to ... moim zdaniem "NIE" - w sensie nie powinieneś łączyć 2 (czy więcej tabel) po kolumnach w których z obu stron może występować NULL. Z założenia 1 tablica powinna być nie jako kluczem i w tym raczej nie powinien występować NULL ... ale oczywiście są wyjątki.
Zapytanie powinno wyglądać tak:
SELECT Table1.Field1, Table1.Field2, Table2.ID2
FROM Table1 LEFT JOIN Table2 ON (nz(Table1.Field2) = nz(Table2.Field2)) AND (nz(Table1.Field1) = nz(Table2.Field1));
https://support.office.com/pl-pl/article/funkcja-nz-8ef85549-cc9c-438b-860a-7fd9f4c69b6c
Czy to jest dobre podejscie i czesto uzywane?
To jest jedyne podejście przy sprzężeniu tabel i wartościach null
, ponieważ jeden null
nie będzie nigdy równy drugiemu null
(wg ANSI) (poczytaj o logice trójwartościowej w bazach danych), więc jeżeli chcesz łączyć się po kolumnach z null
to musisz zamienić wartości null
na cos co da się porównywać.