1

[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 日から始まる 1 週間の活動とともに取得したいと考えています。その方法は次のとおりです。

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

すべての担当者を取得することを期待して a を使用しLEFT JOINましたが、これは要件によって上書きされていると思いaDateます。aDate = NULLまったく活動していない担当者を含めますが、指定された範囲外で活動している担当者は除外されています。

記録されたアクティビティに関係なく、すべての担当者を少なくとも 1 回取得するにはどうすればよいですか?

御時間ありがとうございます。

4

1 に答える 1

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
于 2013-10-21T07:57:41.233 に答える