Heim > Datenbank > MySQL-Tutorial > Wie wirkt sich eine WHERE-Klausel auf das Verhalten eines LEFT JOIN in SQL aus?

Wie wirkt sich eine WHERE-Klausel auf das Verhalten eines LEFT JOIN in SQL aus?

Barbara Streisand
Freigeben: 2025-01-03 20:58:43
Original
666 Leute haben es durchsucht

How Does a WHERE Clause Affect a LEFT JOIN's Behavior in SQL?

Verhalten des Left-Joins in der WHERE-Klausel

In SQL soll ein Left-Join alle Zeilen aus der linken Tabelle einschließen, auch wenn diese vorhanden sind Es gibt keine passenden Zeilen in der rechten Tabelle. Bestimmte Bedingungen können dieses Standardverhalten jedoch ändern.

Betrachten Sie die folgende Abfrage:

SELECT
a.foo,
b.bar,
c.foobar
FROM tableOne AS a
INNER JOIN tableTwo AS b ON a.pk = b.fk
LEFT JOIN tableThree AS c ON b.pk = c.fk
WHERE a.foo = 'something'
AND c.foobar = 'somethingelse'
Nach dem Login kopieren

In dieser Abfrage wird der linke Join zwischen tableTwo und tableThree aufgrund von effektiv in einen inneren Join umgewandelt die Bedingung in der WHERE-Klausel, c.foobar = 'somethingelse'. Dies liegt daran, dass durch die Angabe eines Nicht-NULL-Werts auf der rechten Seite eines linken Joins (hier „somethingelse“) in der WHERE-Klausel alle Zeilen entfernt werden, in denen die entsprechende Spalte NULL ist, was zu einem inneren Join-Verhalten führt.

Daher gibt die Abfrage nur Zeilen von tableOne und tableTwo zurück, die übereinstimmende Zeilen in tableThree mit einem Wert ungleich NULL für c.foobar haben. Um das gewünschte Left-Join-Verhalten beizubehalten, ziehen Sie die folgenden Lösungen in Betracht:

1. Fügen Sie NULL in die WHERE-Klausel ein:

Ersetzen Sie die Bedingung c.foobar = 'somethingelse' durch AND (c.foobar = 'somethingelse' ODER c.foobar IS NULL), um Zeilen einzuschließen, in denen foobar entweder ' Somethingelse‘ oder NULL.

2. Bedingung in Join-Prädikat verschieben:

Verschieben Sie die Bedingung c.foobar = 'somethingelse' aus der WHERE-Klausel in das Join-Prädikat:

LEFT JOIN tableThree AS c ON b.pk = c.fk AND c.foobar = 'somethingelse'
Nach dem Login kopieren

Auf diese Weise bleibt die Abfrage erhalten das Left-Join-Verhalten, während weiterhin Zeilen basierend auf dem Wert von c.foobar herausgefiltert werden.

Das obige ist der detaillierte Inhalt vonWie wirkt sich eine WHERE-Klausel auf das Verhalten eines LEFT JOIN in SQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage