的MS Access:比较两个表与重复
我有两个表看起来像这样:的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行。任何人都可以在正确的轨道上指出我吗?
我觉得你只是想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;
你可以通过MS ACCESS吗? –
该查询在MS Access中有效 - 你可能需要为了避免列名,但这就是全部 –
试过了,但是它让我在表1中的最后一行。我需要得到最后2行。 –
'T1'的第三行与'T2'中的至少一行相匹配,并且您要求最后两行将返回'T1'行。这是否意味着你希望为每场比赛返回一个且只有一行,无论发生的频率如何?或者你实际上是在追逐'T1'的最后一行(这是你在问题的其他地方所要求的吗? – toonice