Wikipedie:
"V matematice je binární operace komutativní, pokud změna pořadí operandů nemění výsledek. Je to základní vlastnost mnoha binárních operací a závisí na ní mnoho matematických důkazů."
Odpověď:
ne, levé spojení není komutativní. A vnitřní spojení je.
Ale to není to, na co se ptáte.
Je následující dotaz:
TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD
(vše připojeno ke sloupci id) ekvivalentní:
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
Odpověď:
Také ne. Odbory a spojení ve skutečnosti nedosahují toho samého, obecně řečeno. V některých případech je možná budete schopni napsat ekvivalentně, ale nemyslím si, že tak obecný pseudo sql, který ukazujete. Zdá se, že konstituce ON by neměla fungovat (možná něco, o čem v MySQL nevím?)
Zde je zjednodušená sada dotazů, o kterých si myslím, že by byly ekvivalentní.
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
Edit 2:
Zde je další příklad, který je vám bližší, ale v podstatě stejný.
SELECT *
FROM TableA a
INNER JOIN TableB b ON a.id = b.id_a
LEFT JOIN TableC c ON b.id = c.id_b
je stejný jako
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
Ale já pořád Nemyslete si, že odpovídám na vaši skutečnou otázku.