【问题标题】:Find and delete duplicates only if two fields have matching data Ms Access仅当两个字段具有匹配的数据时才查找和删除重复项 Ms Access
【发布时间】:2015-05-06 23:49:15
【问题描述】:

我想创建一个查询,该查询仅在两个字段具有匹配数据时才查找和删除重复项。并不意味着这两个字段完全匹配,例如字段 A 和字段 B 都具有“未处理”,但从某种意义上说,表中的两条记录在字段 A 中具有“1234”并且在字段 B 中具有“未处理”,那么整行记录应该被删除,只有最旧的记录(明显更靠近列标题的记录)将保留在表中。

希望这是有道理的。谢谢!

【问题讨论】:

    标签: ms-access-2010


    【解决方案1】:

    与往常一样,请务必在执行任何删除操作之前备份您的访问数据库。

    注意,您可以通过切换到查询的“SQL”视图来创建这些查询。 (而不是默认的“设计”视图)。

    第 1 步 - 识别重复数据。创建一个按查询分组的生成表,该查询按要检查重复项的 2 个字段分组,然后计算一个计数和一个最大值。过滤以仅显示计数 > 1 的记录。将其保存为“Query1”。这将创建一个名为 TEMP_DeleteThese 的临时表。

    SELECT Table1.CaseID, Table1.Status, 
            Count(Table1.ID) AS CountOfID, 
            Max(Table1.ID) AS MaxOfID 
    INTO TEMP_DeleteThese
    FROM Table1
    GROUP BY Table1.CaseID, Table1.Status
    HAVING (((Count(Table1.ID))>1));
    

    第 2 步 - 基于 TEMP_DeleteThese 创建删除查询,并通过“Max ID”字段连接回原始表,这将是最新的重复记录。

    DELETE DISTINCTROW Table1.*
    FROM TEMP_DeleteThese INNER JOIN Table1 ON TEMP_DeleteThese.MaxOfID = Table1.ID;
    

    根据需要多次运行生成表和删除查询以删除所有重复项。

    我在这里假设您有一个主键(在本例中为“Table1.ID”),该主键从低数字开始自动编号,并计数到更高。

    【讨论】:

    • 我很欣赏这个伟大的解释,但我不知道如何创造你刚才所说的任何东西。如果它是用 SQL 编写的,我会知道将我的表和字段名称放在哪里,但实际上我无法从头开始构建它。我对 Access 还很陌生,只知道如何构建简单的查询:(
    • 这是一次性删除重复项的练习,还是需要一个可重复的过程?如果您使用更具体的字段名称编辑您的问题,我可以尝试构建 SQL。
    • 这肯定是可重复的。字段“caseid”和字段“status”是我所指的两个字段。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 2012-01-16
    • 2019-07-25
    相关资源
    最近更新 更多