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 R1wartości, która się nie łączy R2, należy ją zastąpić, NULLaby zestaw wyników stał się ( NULL, R2). Dla mnie wydaje się niemożliwe zwrócenie R2wartości, gdy R1się 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 JOINz LEFT JOIN, ale chodzi o to, aby wyjaśnić, dlaczego jest to technicznie niemożliwe, aby NESTED LOOPS JOINużyć / support RIGHT JOINlogika.