2013-10-21 34 views
1

我有[Users]表,简化了这个例子:即使JOINed表中没有相应的记录,我如何从一个表中获取所有记录?

uID | uName | uSalesRep 
----+-------+---------- 
    1 | John | 1 
    2 | Bob | 1 
    3 | Fred | 1 
    4 | Stu | 1 

和销售的[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 

我想要得到的所有销售代表清单,连同他们的活动为2013年10月14日开始的一周,以下是我想要做的事情:

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 

我用LEFT JOIN希望检索所有代表,但我认为这被aDate要求所覆盖。包括aDate = NULL包括没有活动的代表,但是具有超出指定范围活动的代表将被省略。

我怎样才能让所有代表至少一次,不管他们记录的任何活动?

谢谢你的时间。

回答

2

当过滤器适用于连接表,你需要把过滤器上join,而不是在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 
+0

我不知道进一步的情况可以适用于'JOIN's。谢谢。 – Kalessin

相关问题