Join z pustymi polami ms access

Join z pustymi polami ms access
JA
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 2 lata
  • Postów:127
0

Cześć,

mam takiego joina:

Screenshot_25.png

i dostaję:

titleScreenshot_26.png

czyli pole ID2 jest puste.
Jak mozna wskazać accessowi, że ma też łączyć po pustych polach?

table są identyczne tylko mamy nulle.

BlackBad
  • Rejestracja:ponad 8 lat
  • Ostatnio:2 dni
  • Postów:454
0

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()

edytowany 1x, ostatnio: BlackBad
JA
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 2 lata
  • Postów:127
0

czesc!

Czy to jest dobre podejscie i czesto uzywane?

BlackBad
  • Rejestracja:ponad 8 lat
  • Ostatnio:2 dni
  • Postów:454
0

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.

edytowany 1x, ostatnio: BlackBad
PA
Dlaczego nie jest to dobre podejście? IMO to trzeba rozpatrywać w kategoriach, jeżeli się łącze po polach gdzie mam null-a i sytuacja wymaga aby null=null to zamieniam, nie rozpatrywałbym tego w kontekście dobre/złe...
BlackBad
Tak masz racje, ale podszedłem do tego pytania nie jako ze swojej praktyki. to jest zastanowiłem się czy kiedykolwiek potrzebowałem takie złączenia ... i odpowiedziałem sobie może raz czy dwa ... czyli promil wszystkich złączeń. Oczywiście jak napisałem są wyjątki i jak jest taka potrzeba to jest to jedyny wyjście :) Może faktycznie źle, że zacząłem to oceniać "dobrze/źle". ... ale dla tego napisałem poczekajmy na kogo mądrzejszego .. no i przyszedł taki jeden ;) i potwierdził oraz rozwiał wątpliwości z mojego posta.
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 2 godziny
  • Postów:3881
0

Zapytanie powinno wyglądać tak:

Kopiuj
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ć.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.