Heim >Datenbank >MySQL-Tutorial >Warum schlägt mein Left Outer Join fehl, wenn ich Datumsparameter zur WHERE-Klausel hinzufüge?

Warum schlägt mein Left Outer Join fehl, wenn ich Datumsparameter zur WHERE-Klausel hinzufüge?

Linda Hamilton
Linda HamiltonOriginal
2025-01-17 14:16:10654Durchsuche

Why Does My Left Outer Join Fail When Adding Date Parameters to the WHERE Clause?

Fehlerbehebung bei einem LEFT OUTER JOIN mit Datumsfiltern

Diese SQL-Abfrage verwendet einen LEFT OUTER JOIN über drei Tabellen hinweg: salesrep, prescriber und prescriptions. Ziel ist es, alle Daten aus salesrep abzurufen, auch wenn in prescriber oder prescriptions keine passenden Einträge vorhanden sind. Das Problem entsteht, wenn der WHERE-Klausel Datumsparameter hinzugefügt werden. Anstatt wie erwartet alle salesrep-Daten zurückzugeben, gibt die Abfrage nur Ergebnisse zurück, bei denen in allen drei Tabellen Übereinstimmungen vorhanden sind.

Das Problem ergibt sich aus der Filterung nach prescriptions.filldate innerhalb der WHERE-Klausel. Diese Bedingung wandelt den LEFT OUTER JOIN effektiv in einen INNER JOIN für diejenigen salesrep-Einträge um, denen entsprechende prescriptions-Daten fehlen, da die WHERE-Klausel Zeilen mit NULL-Werten für prescriptions.filldate eliminiert.

Die Lösung: Datumsfilter in die JOIN-Bedingung verschieben

Der richtige Ansatz besteht darin, die Datumsbeschränkungen aus der WHERE-Klausel in die ON-Klausel des LEFT OUTER JOIN zwischen prescriber und prescriptions zu verschieben. Dadurch wird sichergestellt, dass sich die Datumsfilterung nur auf die Verknüpfung zwischen diesen beiden Tabellen auswirkt und gleichzeitig das beabsichtigte Verhalten des LEFT OUTER JOIN in Bezug auf salesrep.

beibehalten wird

Der korrigierte Join sollte so aussehen:

<code class="language-sql">LEFT OUTER JOIN prescriptions ON prescriber.dea_no = prescriptions.dea_no
                             AND prescriptions.filldate >= '09-01-12'
                             AND prescriptions.filldate <= '09-17-12'</code>

Durch die Platzierung der Datumseinschränkungen in der ON-Klausel werden Zeilen aus salesrep in die Ergebnisse einbezogen, auch wenn es in prescriptions keine passenden Einträge gibt, die die Datumskriterien erfüllen. Diese Zeilen enthalten einfach NULL-Werte für die Spalten von prescriber und prescriptions. Dies spiegelt genau das gewünschte Verhalten eines LEFT OUTER JOIN wider.

Das obige ist der detaillierte Inhalt vonWarum schlägt mein Left Outer Join fehl, wenn ich Datumsparameter zur WHERE-Klausel hinzufüge?. 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