Heim >Datenbank >MySQL-Tutorial >Kann ein INNER JOIN die Ergebnisse eines OUTER JOIN überschreiben?
INNER JOINs und OUTER JOINs: Ihre Interaktion verstehen
In diesem Artikel wird untersucht, wie sich die Kombination von INNER JOINs und OUTER JOINs (LEFT, RIGHT oder FULL) in SQL-Abfragen auf die endgültige Ergebnismenge auswirken kann. Konkret untersuchen wir, ob ein nachfolgender INNER JOIN das Verhalten eines vorhergehenden OUTER JOIN überschreiben kann.
Die Auswirkungen der Beitrittsreihenfolge
Der Schlüssel liegt in der ON
-Klausel jedes Joins. Ein späterer INNER JOIN negiert nur dann die Wirkung eines früheren OUTER JOIN, wenn seine ON
-Klausel Nicht-Null-Werte aus Spalten erfordert, die aufgrund des OUTER JOIN möglicherweise NULL sind. Durch einfaches Ändern der Beitrittsreihenfolge lässt sich das Problem nicht beheben. Stattdessen muss der INNER JOIN in einen passenderen OUTER JOIN geändert werden.
Anschauliche Beispiele
Bedenken Sie diese Szenarien:
Diese Abfrage funktioniert wie erwartet:
<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>
Das Ergebnis ist das gleiche, wenn das LEFT JOIN
nach dem INNER JOIN
platziert wird.
Diese Abfrage verhält sich jedoch anders:
<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>
Hier schlägt das INNER JOIN
auf city
für jedes person
ohne entsprechenden address
-Eintrag fehl, da address.city_id
NULL sein könnte. Die Lösung besteht darin, das INNER JOIN
durch ein LEFT JOIN
.
Empfohlene Vorgehensweisen für Lesbarkeit und Effizienz
Für eine bessere Lesbarkeit und Wartbarkeit des Codes empfiehlt es sich, Ihre Verknüpfungen logisch anzuordnen. Platzieren Sie INNER JOINs zuerst, da sie Kernbeziehungen darstellen, gefolgt von OUTER JOINs. Obwohl RIGHT OUTER JOINs seltener vorkommen, ist es aus Gründen der Konsistenz im Allgemeinen ratsam, sie zugunsten von LEFT OUTER JOINs zu vermeiden. Dieser Ansatz spiegelt deutlich die wesentlichen Datenbeziehungen und die optionalen Erweiterungen wider, die durch die OUTER JOINs eingeführt werden.
Das obige ist der detaillierte Inhalt vonKann ein INNER JOIN die Ergebnisse eines OUTER JOIN überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!