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'