Heim >Datenbank >MySQL-Tutorial >Negiert ein INNER JOIN nach einem OUTER JOIN den Effekt des OUTER JOIN?

Negiert ein INNER JOIN nach einem OUTER JOIN den Effekt des OUTER JOIN?

DDD
DDDOriginal
2025-01-09 10:41:41438Durchsuche

Does an INNER JOIN After an OUTER JOIN Negate the OUTER JOIN's Effect?

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 JOINs in Multi-Join-Abfragen immer vor OUTER JOINs 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 JOINs vor OUTER JOINs zu platzieren. Dies verbessert die Lesbarkeit und verdeutlicht die wesentlichen Filterbedingungen der Abfrage. Darüber hinaus werden RIGHT OUTER JOINs oft weniger bevorzugt und können für eine bessere Klarheit und Wartbarkeit normalerweise mit LEFT OUTER JOINs 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn