Nun setzen können, ist es die Reihenfolge der Operationen ..
SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
ON t2.table2_ID = t1.table1_ID
neu geschrieben werden kann als:
SELECT
t1.*
FROM
table1 t1 -- inner join t1
INNER JOIN
(table2 t2 LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID) -- with this
ON t2.table2_ID = t1.table1_ID -- on this condition
Also im Grunde der erste Straße links Sie t2 mit t3 JOIN, auf der Join-Bedingung basiert: table3_ID = table2_ID, dann JOIN Sie INNER t1 mit t2 auf table2_ID = table1_ID.
In Ihrem zweiten Beispiel zuerst INNER JOIN t1 mit t2, und dann LEFT JOIN der resultierende innere Join mit Tabelle t3 auf der Bedingung table2_ID = table1_ID.
SELECT
t1.*
FROM
table1 t1
INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID
LEFT JOIN table3 t3 ON t3.table3_ID = t2.table2_ID
werden könnte neu geschrieben als:
SELECT
t1.*
FROM
(table1 t1 INNER JOIN table2 t2 ON t2.table2_ID = t1.table1_ID) -- first inner join
LEFT JOIN -- then left join
table3 t3 ON t3.table3_ID = t2.table2_ID -- the result with this
EDIT
Ich entschuldige mich. Meine erste Bemerkung war falsch. Die zwei Abfragen führen zu denselben Ergebnissen, aber es kann zu Leistungsunterschieden kommen, da die erste Abfrage in manchen Fällen langsamer ausgeführt werden kann als die zweite Abfrage (wenn Tabelle 1 nur eine Teilmenge der Elemente in Tabelle 2 enthält), wie dies bei LEFT JOIN der Fall ist zuerst ausgeführt werden - und dann nur mit table1 geschnitten werden. Im Gegensatz zu der zweiten Abfrage, die es dem Abfrageoptimierer ermöglicht, seine Aufgabe zu erledigen.
Geben sie das gleiche Ergebnis, wenn Sie sie ausführen? –
+1 für mich zu gehen "Hm ..." – Tomalak
Es ist eine viel leichter zu verstehen, die zweite als die erste - auch wenn Sie (Parens) um die LOJ in der ersten setzen. Ich freue mich darauf, eine gute Antwort zu diesem Thema abzugeben. –