„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Überstellt ein innerer Join die Einbeziehung von Nullwerten durch den äußeren Join?

Überstellt ein innerer Join die Einbeziehung von Nullwerten durch den äußeren Join?

Gepostet am 2025-03-13
Durchsuche:803

Does an INNER JOIN Override an OUTER JOIN's Inclusion of NULL Values?

die Interaktion der inneren und äußeren Verschlüsse in SQL

Komplexe SQL -Abfragen verwenden häufig mehrere Join -Operationen, wobei verschiedene Join -Typen kombiniert werden. Eine zentrale Überlegung ist, wie die Einbeziehung von Nullwerten, die eine Merkmal von äußeren Verknüpfungen bezeichnet, beeinflusst wird, wenn anschließend ein innerer Join angewendet wird.

Wie innere Anschlüsse die äußeren Join -Ergebnisse beeinflussen können

Ein innerer Join gibt von Natur aus nur Zeilen zurück, in denen der Join -Zustand in beide Tabellen erfüllt wird. Wenn ein innerer Join einem äußeren Join folgt und der Zustand des inneren Join auf Spalten beruht, die möglicherweise null sind (aufgrund des äußeren Join), filtert er effektiv Zeilen, bei denen diese Spalten null sind. Dies negiert die Einbeziehung von Nullwerten, die der äußere Join ursprünglich bereitgestellt hat.

.

Illustratives Beispiel

Lassen Sie uns ein Szenario untersuchen:

SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN email ON person.email_id = email.id;

Die links join stellt sicher, dass alle Zeilen aus der Tabelle person enthalten sind, auch wenn es keinen passenden Eintrag in address gibt. Die innere join mit E -Mail beschränkt dann die Ergebnisse nur auf diese Zeilen, in denen in beiden Person und E -Mail eine passende E -Mail_id vorhanden sind. Zeiger von person , die eine passende adress hatte, aber ein null E -Mail_id wird ausgeschlossen.

Ein problematisches Szenario und seine Lösung

Betrachten Sie diese Abfrage:

SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
INNER JOIN city ON address.city_id = city.id;

hier, die innere join mit City nimmt an, dass adress.city_id niemals null ist. Wenn einige Adressen eine City_id fehlen, werden diese Zeilen (und assoziiert Person Zeilen) weggelassen und ändern die Ergebnisse der initialen links join .

.

Der korrekte Ansatz besteht darin, einen anderen join zu verwenden anstelle der inneren join :

SELECT *
FROM person
LEFT JOIN address ON person.address_id = address.id
LEFT JOIN city ON address.city_id = city.id;

Dies bewahrt die Inklusivität der Initial links join , die Fälle korrekt bearbeitet, wobei adress.city_id null sein könnte. Dies stellt sicher, dass alle Person Aufzeichnungen enthalten sind, unabhängig davon, ob sie eine Adresse oder eine Stadt haben.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3