У блозі Крейга Фрідмана, Nested Loops Join , він пояснює, чому вкладені петлі з'єднання не можуть підтримувати правильне зовнішнє з'єднання:
Проблема полягає в тому, що ми скануємо внутрішню таблицю кілька разів - один раз для кожного ряду зовнішнього з'єднання. Під час цих кількох сканувань ми можемо зустріти одні й ті ж внутрішні рядки кілька разів. На якому моменті можна зробити висновок, що певний внутрішній ряд не приєднується чи не буде?
Чи може хтось, будь ласка, пояснити це по-справжньому простим та навчальним способом?
Чи означає це, що цикл починається з зовнішньої таблиці ( R1
) і сканує внутрішню ( R2
)?
Я розумію, що для R1
значення, яке не поєднується R2
, його слід замінити NULL
таким чином, набір результатів стає ( NULL, R2
). Мені здається неможливим повернути R2
значення, коли R1
воно не приєднується, з тієї причини, що він не може знати, яке R2
значення повернути. Але це не так, як це пояснюється. Або це?
SQL Server робить фактично оптимізують (і часто замінює) RIGHT JOIN
з LEFT JOIN
, але питання в тому , щоб пояснити , чому це технічно неможливо для NESTED LOOPS JOIN
використання / підтримки RIGHT JOIN
логіки.