Jointure Externe Gauche Ne Fonctionne Pas?
J'ai une requête de l'extraction de données à partir de trois tables à l'aide d'une JOINTURE EXTERNE GAUCHE pour les jointures. J'ai besoin de la requête pour renvoyer le plus à gauche (table Salesrep) info même si il n'y a pas de données correspondantes dans les deux tables de droite (le prescripteur et les prescriptions, respectivement). Lorsque j'exécute cette requête sans les paramètres de date dans la clause where, je reçois le rendement attendu, mais dès que j'ai inclure les paramètres de date je ne reçois rien retourné là où il n'y a pas de données correspondantes pour un salesrep. J'ai besoin de voir au moins les colonnes de la table salesrep demandé dans la requête.
Voici la requête... toute aide est TRÈS appréciée.
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
WHERE salesrep.salesrepid = 143 AND
prescriptions.filldate >= '09-01-12' AND
prescriptions.filldate <= '09-17-12'
ORDER BY prescriptions.filldate
- Quel SGBD? (Hors sujet, mais je déteste la drogue reps & de l'industrie du médicament)
- sujet), ce n'est pas étonnant, compte tenu d'un fort biais des médias à l'encontre de l'industrie 🙂
- Double Possible de Left Join pas retourner toutes les lignes
Vous devez vous connecter pour publier un commentaire.
Vous devez déplacer les contraintes sur
prescriptions.filldate
dans leON
condition de le rejoindre, et l'enlever de lawhere
clause:Sinon, les entrées pour lesquelles il n'existe pas de
prescriptions
jusqu'à la fin avecnull
s dansprescriptions.filldate
, et laWHERE
clause jette loin.where
commeon
semble être un problème communIci vous trouverez une brève description sur le traitement des requêtes phases (il est commun pour la plupart des DBMSes). Vous trouverez là-bas, que pour la JOINTURE EXTERNE:
Lorsque vous placez la condition dans la clause where qui touche à l'extérieur des tables rangées ils sont tous rejetés. Il vous suffit de placer cette condition dans la clause, que l'on est évaluée avant l'extérieure des lignes sont ajoutées.
Donc, ces conditions:
devrait être déplacé dans la clause.
C'est parce que votre
prescriptions.filldate
les inégalités sont en filtrant votresalesrep
lignes qui n'ont pas de valeur dans laprescriptions.filldate
colonne.Donc si il y a des valeurs null (pas de couplage des données depuis les tables de droite), puis l'ensemble de la ligne, y compris la salesrep les données sont filtrées par les filtres de date - parce que le
null
ne tombe pas entre les deux dates.