Craig Freedman'ın Nested Loops Join adlı blogunda, yuvalanmış döngülerin neden sağ dış bir birleşimi destekleyemediğini açıklar:
Sorun, iç tablayı birden çok kez taramamızdır - dış birleşimin her satırı için bir kez. Bu çoklu taramalar sırasında aynı iç sıralarla birçok kez karşılaşabiliriz. Hangi noktada belirli bir iç sıranın katılmadığı veya katılmayacağı sonucuna varabiliriz?
Birisi bunu gerçekten basit ve eğitici bir şekilde açıklayabilir mi?
Döngünün dış tablo ( R1
) ile başladığı ve inner ( R2
) öğesini taradığı anlamına mı geliyor ?
R1
Katılmayan bir değer için sonuç kümesinin ( ) olması için bir değerle R2
değiştirilmesi gerektiğini anlıyorum . Benim için katılmadığı zaman bir değer döndürmek imkansız gibi görünüyor , çünkü hangi değerin geri döneceğini bilemiyor . Ama bu şekilde açıklanmadı. Yoksa öyle mi?NULL
NULL, R2
R2
R1
R2
SQL Server aslında optimize yapar (ve genellikle yerine geçer) RIGHT JOIN
ile LEFT JOIN
, ama soru bu yüzden açıklamaktır teknik bir imkansız NESTED LOOPS JOIN
kullanmak / destek RIGHT JOIN
mantığı.