1

我有两张桌子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
    
4

1 回答 1

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 小提琴演示

更新:如果您想获得两个表的不匹配列表,您可以将两个LEFT JOINs 与一个UNION 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;

更新的 SQL Fiddle 演示

于 2012-11-10T09:45:33.743 回答