Wikipédia :
"En mathématiques, une opération binaire est commutative si la modification de l'ordre des opérandes ne change pas le résultat. C'est une propriété fondamentale de nombreuses opérations binaires, et de nombreuses preuves mathématiques en dépendent."
Réponse :
non, une jointure à gauche n'est pas commutative. Et la jointure interne l'est.
Mais ce n'est pas vraiment ce que vous demandez.
Est la requête suivante :
TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD
(tous joints à une colonne id) équivalent à :
TableA INNER JOIN TableB
INNER JOIN TableC
LEFT JOIN TableD
UNION
TableA INNER JOIN TableB
LEFT JOIN TableC ON TableB.c_id IS NULL
LEFT JOIN TableD
Réponse :
Aussi non. Les unions et les jointures n'accomplissent pas vraiment la même chose, d'une manière générale. Dans certains cas, vous pourrez peut-être les écrire de manière équivalente, mais je ne pense pas que le pseudo sql général que vous montrez. La constitution ON semble ne pas fonctionner (peut-être quelque chose que je ne connais pas dans MySQL ?)
Voici un ensemble simplifié de requêtes qui, à mon avis, seraient équivalentes.
SELECT *
FROM TableA a
LEFT JOIN
TableB b ON a.id = b.id_a
SELECT *
FROM TableA a
INNER JOIN
TableB b ON a.id = b.id_a
UNION
SELECT *
FROM TableA a
LEFT JOIN
TableB b ON a.id = b.id_a
WHERE TableB.id IS NULL
Éditer 2 :
Voici un autre exemple qui est plus proche de votre mais essentiellement le même.
SELECT *
FROM TableA a
INNER JOIN TableB b ON a.id = b.id_a
LEFT JOIN TableC c ON b.id = c.id_b
est le même que
SELECT *
FROM TableA a
INNER JOIN TableB b ON a.id = b.id_a
INNER JOIN TableC c ON b.id = c.id_b
UNION
SELECT *
FROM TableA a
INNER JOIN TableB b ON a.id = b.id_a
LEFT JOIN TableC c ON b.id = c.id_b
WHERE TableC.id IS NULL
Mais je toujours ne pense pas que je réponds à ta vraie question.