W blogu Craig Freedman, w zagnieżdżonych pętli Dołącz wyjaśnia dlaczego zagnieżdżone pętle przystąpić nie może poprzeć prawo sprzężenia zewnętrznego:
Problem polega na tym, że skanujemy wewnętrzną tabelę wiele razy - raz dla każdego rzędu sprzężenia zewnętrznego. Podczas tych wielu skanów możemy napotkać te same wewnętrzne rzędy wiele razy. W którym momencie możemy dojść do wniosku, że określony rząd wewnętrzny nie dołączył lub nie będzie się łączyć?
Czy ktoś może wyjaśnić to w naprawdę prosty i edukacyjny sposób?
Czy to oznacza, że pętla zaczyna się od zewnętrznej tabeli ( R1
), a skanuje wewnętrzną ( R2
)?
Rozumiem, że dla R1
wartości, która się nie łączy R2
, należy ją zastąpić, NULL
aby zestaw wyników stał się ( NULL, R2
). Dla mnie wydaje się niemożliwe zwrócenie R2
wartości, gdy R1
się nie łączy, z tego powodu, że nie może wiedzieć, któraR2
wartość zwrócić. Ale nie tak to wyjaśnia. Albo to jest?
SQL Server działa w rzeczywistości Optimize (i często zastępuje) RIGHT JOIN
z LEFT JOIN
, ale chodzi o to, aby wyjaśnić, dlaczego jest to technicznie niemożliwe, aby NESTED LOOPS JOIN
użyć / support RIGHT JOIN
logika.
źródło