Dans le blog de Craig Freedman, Nested Loops Join , il explique pourquoi la jointure de boucles imbriquées ne peut pas prendre en charge une jointure externe droite:
Le problème est que nous analysons la table interne plusieurs fois - une fois pour chaque ligne de la jointure externe. Nous pouvons rencontrer les mêmes lignes internes plusieurs fois pendant ces analyses multiples. À quel moment pouvons-nous conclure qu'une rangée intérieure particulière ne s'est pas jointe ou ne se joindra pas?
Quelqu'un peut-il expliquer cela d'une manière vraiment simple et éducative?
Est-ce à dire que la boucle commence par la table externe ( R1
) et scanne l'intérieur ( R2
)?
Je comprends que pour une R1
valeur qui ne rejoint pas R2
, elle doit être remplacée par un NULL
pour que l'ensemble de résultats devienne ( NULL, R2
). Pour moi, il semble impossible de renvoyer une R2
valeur lorsque R1
ne se joint pas, car il ne peut pas savoir quelle R2
valeur renvoyer. Mais ce n'est pas ainsi que cela est expliqué. Ou est-ce?
SQL Server optimise en fait (et remplace souvent) RIGHT JOIN
avec LEFT JOIN
, mais la question est d'expliquer pourquoi il est techniquement impossible pour une logique d' NESTED LOOPS JOIN
utilisation / de support RIGHT JOIN
.
la source