ในบล็อกของ Craig Freedman เข้าร่วม Nested Loops Joinเขาอธิบายว่าทำไมการเข้าร่วม loops แบบซ้อนไม่สามารถรองรับการเข้าร่วมด้านนอกที่ถูกต้อง:
ปัญหาคือเราสแกนตารางด้านในหลาย ๆ ครั้ง - หนึ่งครั้งสำหรับแต่ละแถวของการรวมภายนอก เราอาจพบแถวภายในเดียวกันหลายครั้งในระหว่างการสแกนหลายครั้ง เราสามารถสรุปได้ว่าจุดภายในแถวใดแถวหนึ่งไม่ได้หรือจะไม่เข้าร่วม?
ใครช่วยอธิบายสิ่งนี้ด้วยวิธีที่ง่ายและให้ความรู้ได้จริงหรือ?
หมายความว่าการวนรอบเริ่มต้นด้วยตารางด้านนอก ( R1) และการสแกนด้านใน ( R2) หรือไม่
ฉันเข้าใจว่าสำหรับR1ค่าที่ไม่ได้เข้าร่วมR2ควรแทนที่ด้วยNULLชุดผลลัพธ์จึงกลายเป็น ( NULL, R2) สำหรับฉันดูเหมือนว่าเป็นไปไม่ได้ที่จะคืนR2ค่าเมื่อR1ไม่ได้เข้าร่วมด้วยเหตุผลที่ไม่สามารถรู้ว่าR2จะคืนค่าใด แต่นั่นไม่ใช่วิธีที่อธิบาย หรือมันคืออะไร?
ในความเป็นจริง SQL Server จะปรับให้เหมาะสม (และมักจะแทนที่) RIGHT JOINด้วยLEFT JOINแต่คำถามคือเพื่ออธิบายว่าทำไมมันเป็นไปไม่ได้ทางเทคนิคสำหรับตรรกะNESTED LOOPS JOINการใช้งาน / การสนับสนุนRIGHT JOIN