我有两张表staffdetails
和worklog
,其中有员工的开始时间和结束时间。我正在寻找一个结果,列出一些工作人员,当我们执行这个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
答案 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;
更新:如果您希望获得两个表中不匹配的列表,可以将两个LEFT JOIN
与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;