Kombinierte Verwendung von INNER JOIN und OUTER JOIN
Beim Ausführen von Multi-Table-Join-Abfragen ist die Reihenfolge von INNER JOIN und OUTER JOIN entscheidend. Viele Leute glauben fälschlicherweise, dass die Verwendung eines INNER JOIN nach einem OUTER JOIN die Wirkung des OUTER JOIN aufhebt, aber das ist nicht ganz richtig.
Die Rolle von INNER JOIN
INNER JOIN entfernt Zeilen aus der Ergebnismenge, die keine übereinstimmenden Zeilen in der verbundenen Tabelle haben. Wenn in übereinstimmenden Spalten (zum Beispiel Primärschlüssel- und Fremdschlüsselpaare) keine NULL-Werte vorhanden sind, werden diese nicht übereinstimmenden Zeilen trotzdem eliminiert.
Potenzielle Probleme
Die Wirkung eines OUTER JOIN wird nur dann durch einen nachfolgenden INNER JOIN ausgeglichen, wenn die ON-Klausel des INNER JOIN erforderliche Zeilen im OUTER JOIN angibt, die ausgeschlossen werden können. Zum Beispiel in der folgenden Abfrage:
<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, dass address.city_id nicht NULL ist, was die Wirkung des LEFT JOIN zunichte machen kann. Um dieses Problem zu beheben, sollte der zweite JOIN in einen LEFT OUTER JOIN geändert werden.
Best Practices
Obwohl es die Ergebnisse nicht ändert, wird im Allgemeinen empfohlen, INNER JOIN vor OUTER JOIN in der Abfrage einzufügen. Dies trägt zur Verbesserung der Lesbarkeit bei und stellt sicher, dass notwendige Einschränkungen angewendet werden, bevor optionale Einschränkungen angewendet werden. Vermeiden Sie außerdem nach Möglichkeit die Verwendung von RIGHT OUTER JOIN und verwenden Sie stattdessen LEFT OUTER JOIN, was die Klarheit und einfache Implementierung verbessert.
Das obige ist der detaillierte Inhalt vonÜberschreibt ein INNER JOIN die Ergebnisse eines vorherigen OUTER JOIN?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!