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 个重复的表的主要内容,如果未能解决你的问题,请参考以下文章

将文本框中的值插入 2 个不同的表 ms-access

在 MS Access 中创建存储过程?

在 MS Access 中,如何以多对多关系列出记录,以使所列出的表中的记录不重复?

如何批量检查 MS-Access 中的重复项并记录更改?

MS Access 查询:合并特定字段列中具有相同数据的行

选择每组前 N 个项目 ms-Access - MORE "Ns"