左边排除加入不起作用

时间:2013-06-21 03:01:57

标签: sql sql-server join left-join

我有一张表来跟踪工人进出工厂的时间。还有一个跟踪工人名单的相应表格。我需要知道一个工人什么时候没有相应的名册。也就是说,当他们没有被列入名单时,他们就会工作。

示例表数据:

时钟:

Name     Date              StartTime       EndTime
Smith    2013/06/25        09:00           17:00
Smith    2013/06/26        09:03           17:01
Smith    2013/06/27        08:58           16:57
Brown    2013/06/25        09:00           17:00

名册:

Name     Date              StartTime       EndTime
Smith    2013/06/25        09:00           17:00
Smith    2013/06/27        09:00           17:00

因此,我需要看到史密斯2013/06/26和布朗2013/06/25,因为在他们工作的那一天,没有任何工人的名单。

我的下面的脚本不起作用 - 我只是得到一个空白的回报。有什么想法吗?

SELECT * FROM clocks c
LEFT JOIN roster r1
ON clocks.date = roster.date
Left join roster r2
on c.name = r2.name
WHERE r1.date IS NULL

1 个答案:

答案 0 :(得分:1)

您只想加入名单表一次:

SELECT c.name, c.date
FROM clocks c
LEFT JOIN roster r
    ON c.date = r.date
    AND c.name = r.name
WHERE r.date IS NULL

此查询返回时钟表中所有名称/日期,其中名单表中没有对应的行。只需要1个连接(连接谓词有2个部分)。