Heim >Datenbank >MySQL-Tutorial >Warum funktioniert mein LEFT OUTER JOIN nicht mit Datumsfiltern in der WHERE-Klausel?
Debuggen eines fehlerhaften LEFT OUTER JOIN mit Datumsfilterung
Eine häufige Herausforderung bei SQL-Abfragen ist die Verwendung von LEFT OUTER JOIN
mit Datumsfiltern. Es wird erwartet, dass Daten aus der linken Tabelle (z. B. Salesrep
) zurückgegeben werden, auch wenn in den rechten Tabellen (Prescriber
und Prescriptions
) keine übereinstimmenden Daten vorhanden sind. Allerdings kann das Hinzufügen von Datumsfiltern zur WHERE
-Klausel unerwartet dazu führen, dass Datensätze aus der linken Tabelle herausgefiltert werden.
Das Problem verstehen:
Das Problem ergibt sich aus der Position der Datumsbereichsbedingungen. Wenn Sie sie in die WHERE
-Klausel einfügen, werden die Ergebnisse nach der Verknüpfung fälschlicherweise gefiltert, wodurch effektiv Zeilen aus der linken Tabelle entfernt werden, in denen innerhalb des angegebenen Datumsbereichs keine übereinstimmenden Einträge vorhanden sind.
Der richtige Ansatz:
Um die Integrität des LEFT OUTER JOIN
zu wahren, sollten die Datumsbereichskriterien in die ON
-Klausel des Joins selbst integriert werden. Dadurch wird sichergestellt, dass die Filterung während der Verknüpfung erfolgt und alle Datensätze aus der linken Tabelle erhalten bleiben, unabhängig von übereinstimmenden Verschreibungen innerhalb des Datumsbereichs.
Überarbeitete Abfrage:
<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-30-12'</code>
Durch die Verlagerung der Datumsfilter in die Klausel ON
gibt die Abfrage alle Daten aus der Tabelle Salesrep
korrekt zurück, einschließlich Vertriebsmitarbeitern ohne Rezepte innerhalb des angegebenen Zeitrahmens. Dadurch wird das von einem LEFT OUTER JOIN
.
Das obige ist der detaillierte Inhalt vonWarum funktioniert mein LEFT OUTER JOIN nicht mit Datumsfiltern in der WHERE-Klausel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!