MS Access:比较 2 个重复的表
Posted
技术标签:
【中文标题】MS Access:比较 2 个重复的表【英文标题】:MS Access: Compare 2 tables with duplicates 【发布时间】:2017-03-10 02:48:25 【问题描述】:我有两张表,如下所示:
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 行。谁能指出我正确的轨道?
【问题讨论】:
T1
的第三行与T2
中的至少一行匹配,并且您要求返回T1
的最后两行。这是否意味着无论匹配发生的频率如何,您都希望为确实发生的每个匹配返回一行且仅返回一行?还是您实际上只是在追逐T1
的最后一行(这是您在问题的其他地方所要求的?
【参考方案1】:
我想你只是想要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;
【讨论】:
你能通过 MS ACCESS 做到这一点吗? 该查询在 MS Access 中有效——好吧,您可能需要转义列名,但仅此而已。 试过了,但它让我得到表 1 中的最后一行。我需要得到最后 2 行。 @ErnestTatco 。 . .我确实误读了这个问题。如果表没有唯一标识符,您的问题真的很难。希望编辑后的解决方案足够接近。 感谢 Gordon 爵士的帮助,尝试了但仍然排在最后一行。我会尝试编辑你的答案,看看它是否有效。以上是关于MS Access:比较 2 个重复的表的主要内容,如果未能解决你的问题,请参考以下文章