J'ai une table de [Users]
, simplifiée pour cet exemple:
uID | uName | uSalesRep ----+-------+---------- 1 | John | 1 2 | Bob | 1 3 | Fred | 1 4 | Stu | 1
Et un tableau des ventes [Activity]
:
aID | aDate | aUserID | aText ----+------------+---------+--------------- 1 | 2013-10-09 | 1 | John did stuff 2 | 2013-10-14 | 2 | Bob did stuff 3 | 2013-10-17 | 3 | Fred did stuff
Je veux avoir une list de tous les commerciaux , ainsi que leur activité pour la semaine débutant le 14 octobre 2013, et voici comment j'essaie de le faire:
SELECT uID, Name, aID, aDate, aText FROM [Users] LEFT JOIN [Activity] ON uID = UserID WHERE (aDate >= '2013-10-14' OR aDate = NULL) AND (aDate <= '2013-10-18' OR aDate = NULL) AND uSalesRep = 1
J'ai utilisé un LEFT JOIN
dans l'espoir de récupérer tous les représentants, mais je pense que cela est remplacé par les exigences aDate
. Y compris aDate = NULL
inclut les reps sans activité du tout, mais les reps ayant une activité en dehors de la plage spécifiée sont omis.
Comment puis-je get tous les représentants au less une fois, indépendamment de toute activité qu'ils ont enregistrée?
Merci pour votre time.
Lorsque le filter s'applique à la table jointe, vous devez placer le filter sur la join
, pas dans la clause where
SELECT uID, Name, aID, aDate, aText FROM [Users] LEFT JOIN [Activity] ON uID = UserID AND (aDate >= '2013-10-14') AND (aDate <= '2013-10-18') WHERE uSalesRep = 1