In Craig Freedmans Blog " Nested Loops Join" erklärt er, warum der Join "Nested Loops Join" keinen rechten äußeren Join unterstützen kann:
Das Problem ist, dass wir die innere Tabelle mehrmals scannen - einmal für jede Zeile des äußeren Joins. Während dieser mehreren Scans können dieselben inneren Zeilen mehrmals auftreten. An welchem Punkt können wir schließen, dass eine bestimmte innere Reihe nicht beigetreten ist oder nicht beitreten wird?
Kann jemand dies bitte auf wirklich einfache und lehrreiche Weise erklären?
Bedeutet das, dass die Schleife mit der äußeren Tabelle ( R1
) beginnt und die innere ( R2
) scannt ?
Ich verstehe, dass für einen R1
Wert, der nicht mit verknüpft ist, dieser durch einen Wert R2
ersetzt werden sollte, NULL
damit die Ergebnismenge ( NULL, R2
) wird. Für mich scheint es unmöglich, einen R2
Wert zurückzugeben, wenn er R1
nicht verbunden ist, da er nicht wissen kann, welcher R2
Wert zurückgegeben werden soll. Aber so wird es nicht erklärt. Oder ist es?
SQL Server optimiert zwar (und ersetzt es häufig) RIGHT JOIN
durch LEFT JOIN
, aber die Frage ist, warum es technisch unmöglich ist, eine Logik NESTED LOOPS JOIN
zu verwenden / zu unterstützen RIGHT JOIN
.
quelle