Left Outer Join未按预期工作

时间:2014-08-15 04:17:26

标签: sql

也许是因为它是星期五,而我只是没有直接思考,但我希望(并且我试图获得)以下查询输出所有用户,{{ 1}}在EndDate列中,如果没有时间表。相反,我只是让用户拥有时间表。

NULL

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

2 个答案:

答案 0 :(得分:4)

WHERE子句上的条件移至ON子句

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

ON子句在加入表之前过滤行。另一方面,WHERE子句在表连接后过滤掉行。由于您将条件放在WHERE子句上,Timesheets.EndDate NULL 值将被排除。

答案 1 :(得分:2)

您的WHERE子句会过滤掉空值,因为如果没有时间表,Timesheets.EndDateNULL

尝试添加NULL测试:

SELECT Users.Name, Timesheets.EndDate
FROM Users LEFT OUTER JOIN
    Timesheets ON Users.idUser = Timesheets.id_User 
WHERE Timesheets.EndDate IS NULL 
   OR (Timesheets.EndDate = CONVERT(DATETIME, '2014-08-15 00:00:00', 102))
相关问题