列出主表中的所有数据,并使用条件检查另一个表

时间:2012-11-10 09:42:40

标签: sql

我有两张表staffdetailsworklog,其中有员工的开始时间和结束时间。我正在寻找一个结果,列出一些工作人员,当我们执行这个SQL时,他们没有开始工作,请参考下面的例子:

  • staffdetails

    stafid  staffnm
    ------  -------
    100200  John
    100201  Jenny
    100203  Camas
    
  • Worklog

    stfid   startime   finishtime
    ------  ---------  ----------
    100200  11.30 p.m  12.30 p.m
    100201  10.00 a.m  10.30 a.m
    100200  12.35 p.m  12.40. p.m
    100200  12.45 p.m
    100203  1.30 p.m   2.30 p.m
    300200  10.0 p.m   6.00 p.m
    
  • 输出

    staffid   stafname
    -------   --------
    100203    Camas
    100201    Jenny
    

1 个答案:

答案 0 :(得分:1)

使用LEFT JOIN

SELECT s.Name, s.staffId
FROM staffdetails s
LEFT JOIN working w ON w.staffid = s.staffid
WHERE w.staffId IS NULL;

SQL Fiddle Demo

更新:如果您希望获得两个表中不匹配的列表,可以将两个LEFT JOINUNION ALL组合在一起,如下所示:

SELECT s.Name, s.staffId
FROM staffdetails s
LEFT JOIN working w ON w.staffid = s.staffid
WHERE w.staffId IS NULL
UNION ALL
SELECT w.Name, w.staffId
FROM working w
LEFT JOIN staffdetails s ON w.staffid = s.staffid
WHERE s.staffId IS NULL;

Updated SQL Fiddle Demo