L'ordre des opérations a un impact significatif sur les résultats des LEFT, RIGHT et FULL OUTER JOINs.
Commutativité et associativité : non garanties
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.ac_id = a.ac_id</code>
n'est pas garanti être identique à :
<code class="language-sql">a LEFT JOIN c ON c.ac_id = a.ac_id LEFT JOIN b ON b.ab_id = a.ab_id</code>
Scénarios où l'ordre est critique
L'ordre de jointure devient crucial lorsqu'il s'agit de AND
conditions impliquant NULL
valeurs ou fonctions sensibles à NULLs
(comme COALESCE()
). Par exemple :
<code class="language-sql">a LEFT JOIN b ON b.ab_id = a.ab_id LEFT JOIN c ON c.ac_id = a.ac_id AND c.bc_id = b.bc_id</code>
Cette requête donnera un résultat différent de :
<code class="language-sql">a LEFT JOIN c ON c.ac_id = a.ac_id AND c.bc_id = b.bc_id LEFT JOIN b ON b.ab_id = a.ab_id</code>
Contrairement aux jointures externes, l'ordre des INNER JOINs n'affecte pas l'ensemble de résultats final. A JOIN B
et B JOIN A
produisent des résultats identiques (en supposant des ajustements appropriés à la clause SELECT
, par exemple SELECT a.*, b.*, c.*
).
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!