2
为什么嵌套循环联接仅支持左联接?
在Craig Freedman的博客Nested Loops Join中,他解释了为什么嵌套循环联接不能支持正确的外部联接: 问题在于,我们多次扫描内部表–对外部联接的每一行扫描一次。在这些多次扫描中,我们可能多次遇到相同的内部行。在什么时候我们可以得出结论,特定的内部行尚未或将不会加入? 有人可以用一种非常简单且具有教育意义的方式来解释这一点吗? 这是否意味着循环从外部表(R1)开始并扫描内部表(R2)? 我了解,对于R1不与相连的值,R2应将其替换为,NULL这样结果集将变为(NULL, R2)。对我来说,似乎无法返回不加入R2时返回值R1,因为它不知道R2要返回哪个值。但这不是它的解释方式。还是? SQL Server会在事实上优化(经常替换)RIGHT JOIN用LEFT JOIN,但问题是解释为什么它在技术上是不可能的NESTED LOOPS JOIN使用/支持RIGHT JOIN逻辑。