1

Temat: Coś w stylu negacji Inner Joina

Witam.
Mam pewien temat który nie wiem za bardzo jak ugryźć, tak kombinuję, może Wy coś podpowiecie. A mianowicie tworzę sobie w bazie tabelę która jest zlepkiem dwóch innych tabel. Wykonuję INNER JOIN-a po numerze_ident. W obu tabelach które join-uje ten numer jest unikalny. I ok, tabelę utworzyłem, wszystko super. Ale mam kilka numerów identyfikacyjnych w tabeli pierwszej które nie występują w tabeli drugiej więc siłą rzeczy w tabeli wynikowej zostaną one pominięte. I teraz co chcę zrobić. Dodałem sobie do zapytania tworzącego mi tabelę wynikową dodatkową kolumnę gdzie wrzucam flagę 'true' i 'false'. I w te wiersze które pomyślnie mi połączył czyli numer ident występował i w jednej i drugiej tabeli wrzucam na końcu flagę 'true'. Następnie chcę wykonać update na tej tabeli wynikowej który zaktualizuje mi ją o te wiersze gdzie ten numer ident występował wyłącznie w pierwszej tabeli a w drugiej nie i na końcu wstawi mi flagę 'false'. Jak myślicie, czy to co opisałem jest wykonalne w jakiś nie skomplikowany sposób?

2

Odp: Coś w stylu negacji Inner Joina

Po prostu poczytaj w dowolnej książce o SQL-u o złączeniach
Masz złączenie typu:
Inner join - złączenie następuje gdy wartości/warunek logiczny są spełnione w obu tebelach
Left join - złączenie chroni tabelę po lewej stronie czyli wyświetli wszystkie wartości z tabeli po lewej stronie nawet jesli nie znajdzie wartości ich odpowiedników w tabeli po prawej stronie
Right join - chroniona jest tabela po prawej stronie (czytaj opis do left join-a)
full join - chronione są wartości z obu tabel

Przykład (koniecznie sam poeksperymentuj zmieniając typ złączenia):
With tab1 as (values (1,'a'),(3,'c')),
     tab2 as (values (1,'odpowiednik a'),(2,'odpowiednik b'))
select tab1.*, tab2.*
from tab1 as tab1 (id,nazwa)
full join tab2 as tab2 (id,nazwa) on tab1.id=tab2.id;

Ostatnio edytowany przez c_michal (2014-10-29 17:42:57)