Sql 使用join从数据库中获取空项

Sql 使用join从数据库中获取空项,sql,sql-server-2012,Sql,Sql Server 2012,我有两张有字段的桌子 ID UserID isPresent InTime OutTime Date ----------- ----------- --------- ---------------- ---------------- ----------------------- 1 1 p 10:00:00.0000000 18:00:00.0000000 2013-0

我有两张有字段的桌子

ID          UserID      isPresent InTime           OutTime          Date
----------- ----------- --------- ---------------- ---------------- -----------------------
1           1           p         10:00:00.0000000 18:00:00.0000000 2013-01-01 00:00:00.000
2           2           P         10:00:00.0000000 18:00:00.0000000 2013-01-02 00:00:00.000
3           2           p         10:00:00.0000000 18:00:00.0000000 2013-01-03 00:00:00.000

And a user table 

USerID      UserName
----------- ----------------------------------------------------------------------------------------------------
1           test
2           test1
3           test2
4           test3
5           test4
6           test5
7           test6
我有一个查询来获取所有员工的出席率,如果它为空,那么将时间和休息时间显示为空

我的问题是

SELECT u.ID as UserID, isPresent, day(Date) as day FROM users u
  join EmployeeAttendance e on e.USerID = u.ID 

  where [Date] between 'Jan  1 2013 12:00AM' and 'Jan 31 2013 11:59PM'
但此查询只提供考勤表中的结果,如

UserID      isPresent day
----------- --------- -----------
1           p         1
2           P         2
2           p         3
但我需要

    UserID      isPresent   day
    ----------- -------   -- -----------
    1           p         1
    2           P         2
    2           p         3
    3           NULL      Null
    4           NULL      Null
    5           NULL      Null
    6           NULL      Null
    7           NULL      Null
你知道我该怎么得到这个吗


谢谢

使用右外连接而不是左连接

左连接


用左外部联接代替联接如何?请,特别是在SQL Server上。除此之外,我对你的出勤表有意见;如果有人在第二天凌晨1点注销,会发生什么?您最好为时钟输入和时钟输出时间存储一个完整的时间戳,这些可能是更好的名称——如果可能的话,您不应该使用保留字作为标识符。您可能不需要考勤表id列,尽管这不是一个真正的问题。因为每个答案都说OP应该使用外部接头,所以我认为这是一个有效的答案,即使它不正确。我不知道这怎么会被认为是一种批评,但它仍然给出了相同的结果…我没有得到任何输入和输出时间为空的记录try->SELECT u.ID as UserID,isPresent,dayDate as day FROM users u LEFT join SELECT*FROM employeeattraction where[Date]在“2013年1月1日12:00AM”和“2013年1月31日11:59PM”之间,e.USerID=u.IDOR此->选择u.ID作为USerID,isPresent,dayDate作为用户离开的日期加入员工e.USerID=u.ID上的考勤e和[Date]在“2013年1月1日12:00AM”和“2013年1月31日11:59PM”之间,它给出了完全满足where条件的结果。。。但是如果用户的出席率不存在,我需要所有用户的空条目
SELECT u.ID as UserID, isPresent, day(Date) as day FROM users u
 LEFT join EmployeeAttendance e on e.USerID = u.ID 

  where [Date] between 'Jan  1 2013 12:00AM' and 'Jan 31 2013 11:59PM'
SELECT u.id      AS UserID, 
       ispresent, 
       Day(date) AS day 
FROM   users u 
       LEFT JOIN employeeattendance e 
              ON e.userid = u.id 
WHERE  [date] BETWEEN 'Jan  1 2013 12:00AM' AND 'Jan 31 2013 11:59PM'