MS Access:将2个表与重复项进行比较

时间:2017-03-10 02:48:25

标签: sql ms-access

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

T1:

ID  |  Date  |  Hour   

T2:

ID  |  Date  |  Hour

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

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

示例数据:

T1:

 1  |  1/1/2011  |  1
 1  |  1/1/2011  |  1  
 1  |  1/1/2011  |  1   
 1  |  1/1/2011  |  2   

T2:

 1  |  1/1/2011  |  1
 1  |  1/1/2011  |  1

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

1 个答案:

答案 0 :(得分:0)

我想你只想要not exists

select t1.*
from t1
where not exists (select 1
                  from t2
                  where t2.id = t1.id and t2.date = t1.date and t2.hour = t1.hour
                 );

编辑:

我误解了这个问题。这在MS Access中很难做到。但是,你可以接近。下面返回表1中不同的行,表2中没有等效的数字:

select t1.id, t1.date, t1.hour, (t1.cnt - t2.cnt)
from (select id, date, hour, count(*) as cnt
      from t1
      group by id, date, hour
     ) t1 left join
     (select id, date, hour, count(*) as cnt
      from t2
      group by id, date, hour
     ) t2 left join
     on t2.id = t1.id and t2.date = t1.date and t2.hour = t1.hour
where t2.cnt < t1.cnt;