Heim >Datenbank >MySQL-Tutorial >Negiert ein INNER JOIN nach einem OUTER JOIN den Effekt des OUTER JOIN?
Verschachtelte SQL-Joins: INNER JOINs und OUTER JOINs
Hebt ein INNER JOIN
nach einem OUTER JOIN
die Wirkung des OUTER JOIN
auf? Und sollten INNER JOIN
s in Multi-Join-Abfragen immer vor OUTER JOIN
s stehen?
Die Antwort ist differenziert. Ein nachfolgendes INNER JOIN
negiert das OUTER JOIN
nur, wenn seine ON
-Klausel das Vorhandensein von Spalten erfordert, die aufgrund des NULL
OUTER JOIN
sein könnten. Durch einfaches Neuanordnen der Verknüpfungen lässt sich das Problem nicht beheben. Sie müssen das INNER JOIN
in ein passendes OUTER JOIN
ändern.
Lassen Sie uns veranschaulichen:
Beispiel 1 (Nachbestellung spielt keine Rolle):
<code class="language-sql">SELECT * FROM person LEFT JOIN address ON person.address_id = address.id INNER JOIN email ON person.email_id = email.id</code>
Hier ändert eine Neuordnung der Verknüpfungen nichts an den Ergebnissen.
Beispiel 2 (Angelegenheiten neu anordnen):
<code class="language-sql">SELECT * FROM person LEFT JOIN address ON person.address_id = address.id INNER JOIN city ON address.city_id = city.id</code>
Die zweite ON
-Klausel erfordert ein Nicht-NULL
address.city_id
. Dadurch wird das LEFT OUTER JOIN
außer Kraft gesetzt und person
-Datensätze ohne passendes city
über address
herausgefiltert. Um dies zu korrigieren, ersetzen Sie das INNER JOIN
durch ein LEFT OUTER JOIN
.
Best Practices:
Obwohl dies nicht unbedingt vorgeschrieben ist, wird im Allgemeinen empfohlen, INNER JOIN
s vor OUTER JOIN
s zu platzieren. Dies verbessert die Lesbarkeit und verdeutlicht die wesentlichen Filterbedingungen der Abfrage. Darüber hinaus werden RIGHT OUTER JOIN
s oft weniger bevorzugt und können für eine bessere Klarheit und Wartbarkeit normalerweise mit LEFT OUTER JOIN
s umgeschrieben werden.
Das obige ist der detaillierte Inhalt vonNegiert ein INNER JOIN nach einem OUTER JOIN den Effekt des OUTER JOIN?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!