2017-03-10 65 views
0

我有两个表看起来像这样:的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的最后2行。任何人都可以在正确的轨道上指出我吗?

+0

'T1'的第三行与'T2'中的至少一行相匹配,并且您要求最后两行将返回'T1'行。这是否意味着你希望为每场比赛返回一个且只有一行,无论发生的频率如何?或者你实际上是在追逐'T1'的最后一行(这是你在问题的其他地方所要求的吗? – toonice

回答

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中不具有相同数字的不同行:

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; 
+0

你可以通过MS ACCESS吗? –

+0

该查询在MS Access中有效 - 你可能需要为了避免列名,但这就是全部 –

+0

试过了,但是它让我在表1中的最后一行。我需要得到最后2行。 –