LEFT OUTER JOIN (daje dodatkowe wiersze) problem
Mam dwie tabele, które chcę połączyć, używając lewego zewnętrznego sprzężenia. Jednak nawet jeśli moja lewa tabela zawiera tylko unikalne wartości, prawa tabela spełnia WARUNKI więcej niż raz i jako taka dodaje dodatkowe wiersze do zestawu wyników.
Kod do replikacji problemu:
declare @tb1 table (c1 int) declare @tb2 table (c2 int) INSERT INTO @tb1 VALUES (1) INSERT INTO @tb1 VALUES (2) INSERT INTO @tb1 VALUES (3) INSERT INTO @tb1 VALUES (4) INSERT INTO @tb2 VALUES (3) INSERT INTO @tb2 VALUES (4) INSERT INTO @tb2 VALUES (5) INSERT INTO @tb2 VALUES (6) select * from @tb1 left outer join @tb2 ON c1 = c2 INSERT INTO @tb2 VALUES (3) INSERT INTO @tb2 VALUES (4) INSERT INTO @tb2 VALUES (5) INSERT INTO @tb2 VALUES (6) select * from @tb1 left outer join @tb2 ON c1 = c2
Jak widać pierwszy SELECT zwraca 4 wiersze, w których drugi SELECT 6, chociaż lewa tabela pozostaje niezmieniona.
Jak zachować ścisłość lewej tabeli i używać tylko prawej tabeli do ZAKOŃCZENIA wierszy z lewej tabeli?
WSPARCIE!
RESULTS: c1 c2 ----------- ----------- 1 NULL 2 NULL 3 3 4 4 [DUPLICATE @tb2 records] c1 c2 ----------- ----------- 1 NULL 2 NULL 3 3 3 3 4 4 4 4