日期:2014-05-17  浏览次数:20578 次

关于2张表的记录读取问题。
A表为员工表(userid,username)。B表为员工考勤记录表(userid,date,shangban,xiaban)。
要求读取某一天(date字段)的username,date,上班,下班几个字段。

假设通过视图可以读取如下记录:

username  date  shangban
张三    2012-11-1   8:00
李四    Null        Null
王五    Null        Null

我希望登记出勤的时候,假设我要登记2012-11-1这天,要能读取出李四,王五。要登记2012-11-2这天时,能显示张三,李四,王五(因为都没有登记过),请问该如何实现? 
------最佳解决方案--------------------

select username,date,shangban,xiaban 
from A left join B on A.userid=B.userid
where A.userid not in(
select userid from B where date='XXXX-XX-02')

------其他解决方案--------------------
select a.userName,b.date,b.shangban from a,b
where a.userid=b.userid and b.date<>null
------其他解决方案--------------------
select username,DATE,shangban
from A left join (select userid,shangban from B where DATE='xxxx-xx-xx') as b on a.userid=b.userid
------其他解决方案--------------------
“因为都没有登记过”是什么意思?
------其他解决方案--------------------

declare @date varchar(10)
set @date=' 2012-11-1'
SELECT a.userName,
       b.date,
       b.shangban
FROM   a 
left join b on a.userid = b.userid
WHERE  convert(varchar(10),b.date)= @date
and b.shangban is null

------其他解决方案--------------------
yangsh0722 正解。