Wikipedia:
„W matematyce operacja binarna jest przemienna, jeśli zmiana kolejności operandów nie zmienia wyniku. Jest to podstawowa właściwość wielu operacji binarnych i zależy od niej wiele dowodów matematycznych”.
Odpowiedź:
nie, lewe sprzężenie nie jest przemienne. A połączenie wewnętrzne to.
Ale tak naprawdę nie o to pytasz.
Czy następujące zapytanie:
TableA INNER JOIN TableB LEFT JOIN TableC LEFT JOIN TableD
(wszystkie połączone z kolumną id) równoważne do:
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
Odpowiedź:
Również nie. Ogólnie rzecz biorąc, związki i łączenia nie dają tak naprawdę tego samego. W niektórych przypadkach możesz być w stanie napisać je równoważnie, ale nie sądzę, aby wyświetlałeś tak ogólny pseudo sql. Wygląda na to, że konstytucja ON nie powinna działać (może coś, o czym nie wiem w MySQL?)
Oto uproszczony zestaw zapytań, które moim zdaniem byłyby równoważne.
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
Edycja 2:
Oto kolejny przykład, który jest bliższy Twojemu, ale zasadniczo taki sam.
SELECT *
FROM TableA a
INNER JOIN TableB b ON a.id = b.id_a
LEFT JOIN TableC c ON b.id = c.id_b
jest taki sam jak
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 ja nadal nie myśl, że odpowiadam na twoje prawdziwe pytanie.