クレイグ・フリードマンのブログ「ネストされたループ結合」では、ネストされたループ結合が右外部結合をサポートできない理由を説明しています。
問題は、内部テーブルを複数回(外部結合の行ごとに1回)スキャンすることです。これらの複数のスキャン中に、同じ内部行に複数回遭遇する可能性があります。特定の内側の行が結合していない、または結合しないと結論できるのはどの時点ですか?
誰かがこれを本当にシンプルで教育的な方法で説明してくれませんか?
それは、ループが外側のテーブル(R1
)で始まり、内側のテーブル()をスキャンすることを意味しR2
ますか?
とR1
結合しない値については、結果セットが()になるようにR2
aに置き換える必要があることを理解しています。参加しない場合に値を返すことは、私にとって不可能であるように思われます。理由は、返す値がわからないためです。しかし、それはそれが説明される方法ではありません。またはそれは?NULL
NULL, R2
R2
R1
R2
SQL Serverは、実際の最適化でない(そして多くの場合、置き換え)RIGHT JOIN
でLEFT JOIN
、しかし問題は、それはだ理由を説明することで、技術的には不可能NESTED LOOPS JOIN
に使用する/サポートRIGHT JOIN
ロジック。