Heim >Datenbank >MySQL-Tutorial >Warum liefert mein LEFT OUTER JOIN bei der Verwendung von Datumsfiltern nicht die erwarteten Ergebnisse?
Lösung des Problems inkonsistenter LEFT OUTER JOIN-Abfrageergebnisse
In SQL dient die LEFT OUTER JOIN-Operation dazu, die Daten in der linken Tabelle beizubehalten, auch wenn die entsprechenden Daten in der rechten Tabelle nicht vorhanden sind. Es kann jedoch verwirrend sein, wenn ein LEFT OUTER JOIN nicht die erwarteten Ergebnisse liefert.
Angenommen, Sie müssen Daten aus drei Tabellen mit LEFT OUTER JOIN abrufen. Sie möchten Informationen aus der Salesrep-Tabelle abrufen, auch wenn in den Prescriber- und Prescriptions-Tabellen keine übereinstimmenden Datensätze vorhanden sind. Wenn Sie diese Abfrage mit einem Datumsparameter in der WHERE-Klausel ausführen, stoßen Sie auf ein unerwartetes Ergebnis: Es werden keine Zeilen für Vertriebsmitarbeiter zurückgegeben, denen keine Daten zugeordnet sind.
Um dieses Problem zu lösen, besteht der Schlüssel darin, die Einschränkungen von Prescriptions.filldate von der WHERE-Klausel in die ON-Bedingung von JOIN zu verschieben. Die geänderte Abfrage sollte etwa wie folgt 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 < '10-01-12'</code>
Zunächst wurden Datensätze mit NULL-Werten in Prescriptions.filldate fälschlicherweise herausgefiltert, wenn der Datumsparameter in der WHERE-Klausel enthalten war. Durch die Aufnahme in die EIN-Bedingung wird der Vertriebsmitarbeiter auch dann in den Ergebnissatz einbezogen, wenn keine zugehörigen Rezeptdetails vorhanden sind, und NULL-Werte werden entsprechend angezeigt.
Wenn Sie nun eine Abfrage ausführen, erhalten Sie erfolgreich die Salesrep-Tabelleninformationen, unabhängig von den entsprechenden Daten in den Prescriber- und Prescriptions-Tabellen.
Das obige ist der detaillierte Inhalt vonWarum liefert mein LEFT OUTER JOIN bei der Verwendung von Datumsfiltern nicht die erwarteten Ergebnisse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!