左外连接不能按预期工作

Tre*_*ent 0 sql

也许是因为今天是星期五,我只是想的没那么直,但是我希望(并且正在尝试得到)以下查询输出所有用户,NULL如果没有时间表,则在EndDate列中使用。相反,我只会得到具有时间表的用户。

SELECT     Users.Name, Timesheets.EndDate
FROM       Users 
LEFT OUTER JOIN
           Timesheets ON Users.idUser = Timesheets.id_User
WHERE     (Timesheets.EndDate = CONVERT(DATETIME, '2014-08-15 00:00:00', 102))
Run Code Online (Sandbox Code Playgroud)

最终目标是找到在给定时间内尚未创建时间表的所有用户。

Joh*_*Woo 6

将条件从WHERE条款移至ON条款,

ON Users.idUser = Timesheets.id_User
   AND Timesheets.EndDate = CONVERT(DATETIME, '2014-08-15 00:00:00', 102)
Run Code Online (Sandbox Code Playgroud)

ON子句在联接表之前过滤行。WHERE另一方面,该子句在连接表之后过滤掉行。既然你把对的条件WHERE从句,Timesheets.EndDateNULL值被排除在外。