时间:2011-07-07 16:13:15

标签: sql ms-access join

我有两个看起来像这样的表:

T1:  ID  |  Date  |  Hour  | Interval
T2:  ID  |  Date  |  Hour

当他们的ID,日期和小时匹配时,我基本上需要加入这些表。但是,我只想从表1中返回与表2中的结果匹配的结果。

我知道这看起来很简单,但我遇到的情况是表1中有多行与表2匹配(任何给定小时都有多个行间隔)。我需要返回所有这些间隔,只要它们不在表2中的相同小时内。

示例数据:

T1:  1  |  1/1/2011  |  1  |  1
     1  |  1/1/2011  |  1  |  2
     1  |  1/1/2011  |  2  |  1
     1  |  1/1/2011  |  2  |  2

T2:  1  |  1/1/2011  |  1

我的预期结果集是T1的最后两行。有人能指出我走在正确的轨道上吗?

2 个答案:

答案 0 :(得分:54)

答案 1 :(得分:24)

使用LEFT JOIN并过滤掉非NULL T2列的行:

SELECT T1.* FROM T1 LEFT JOIN T2 ON T1.ID = T2.ID
    AND T1.Date = T2.Date AND T1.Hour = T2.Hour
    WHERE T2.ID IS NULL