【问题标题】:Left Excluding join not working左排除连接不起作用
【发布时间】:2013-06-21 03:01:56
【问题描述】:

我有一张表,可以跟踪工人何时进出工厂。还有一个相应的表来跟踪工人的花名册。我需要知道工人何时在没有相应名册的情况下打卡。即他们在没有名册的时候工作。

示例表数据:

时钟:

名称日期开始时间结束时间
史密斯 2013/06/25 09:00 17:00
史密斯 2013/06/26 09:03 17:01
史密斯 2013/06/27 08:58 16:57
棕色 2013/06/25 09:00 17:00

名册:

名称 日期 开始时间 结束时间 史密斯 2013/06/25 09:00 17:00 史密斯 2013/06/27 09:00 17:00

因此,我需要在 2013 年 6 月 26 日和布朗 2013 年 6 月 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

【问题讨论】:

  • 你为什么要加入名册2次?

标签: sql sql-server join left-join


【解决方案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 个部分)。

【讨论】:

    猜你喜欢
    • 2015-12-02
    • 2012-09-10
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多