Lösen Sie das Problem der Datumsfilterung in SQL Left Outer Join
In Ihrer SQL-Abfrage hat der linke äußere Join nicht die erwarteten Ergebnisse zurückgegeben. Insbesondere wenn Sie einen Datumsparameter in die WHERE-Klausel aufnehmen, werden Vertriebsmitarbeiter, die in der rechten Tabelle keine passenden Daten haben, nicht angezeigt.
Um dieses Problem zu lösen, müssen Sie die Datumsbeschränkung der prescriptions
-Tabelle in die ON
-Bedingung des Joins verschieben, anstatt sie in der WHERE
-Klausel beizubehalten:
<code class="language-sql">SELECT salesrep.salesrepid as SalesRepID, salesrep.fname as SalesrepFName, salesrep.lname as SalesRepLName, salesrep.fname+' '+salesrep.lname as SalesRepFullName, prescriber.dea_no as PDeaNo, prescriber.lname+', '+prescriber.fname as DocName, CONVERT(VARCHAR(8), prescriptions.filldate, 1) as FillDate, prescriptions.drugname as DrugName, prescriptions.daysupply as Supply, prescriptions.qtydisp as QtyDisp, prescriptions.rx_no as Refill, prescriptions.copay as Sample, ROUND(prescriptions.AgreedToPay-(prescriptions.AgreedToPay*.07),2) as AgreedToPay, prescriptions.carrierid as CarrierID FROM salesrep LEFT OUTER JOIN prescriber on salesrep.salesrepid = prescriber.salesrepid LEFT OUTER JOIN prescriptions ON prescriber.dea_no = prescriptions.dea_no AND prescriptions.filldate >= '09-01-12' AND prescriptions.filldate <= '09-17-12' ORDER BY prescriptions.filldate</code>
Indem Sie die Einschränkung in eine ON
-Bedingung verschieben, können Sie sicherstellen, dass der linke äußere Join korrekt Ergebnisse für alle Vertriebsmitarbeiter zurückgibt, unabhängig davon, ob übereinstimmende Datensätze in der prescriptions
-Tabelle vorhanden sind.
Das obige ist der detaillierte Inhalt vonWarum gibt mein linker äußerer Join nicht alle Vertriebsmitarbeiter zurück, wenn ich nach Datum filtere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!