ในบล็อกของ 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