我有一个[Users]
表,在此示例中进行了简化:
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
包括根本没有活动的代表,但是具有超出指定范围的活动的代表将被省略。
如果他们记录的任何活动,我怎样才能至少获得所有代表一次?
感谢您的时间。
答案 0 :(得分: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