【发布时间】:2015-05-06 23:49:15
【问题描述】:
我想创建一个查询,该查询仅在两个字段具有匹配数据时才查找和删除重复项。并不意味着这两个字段完全匹配,例如字段 A 和字段 B 都具有“未处理”,但从某种意义上说,表中的两条记录在字段 A 中具有“1234”并且在字段 B 中具有“未处理”,那么整行记录应该被删除,只有最旧的记录(明显更靠近列标题的记录)将保留在表中。
希望这是有道理的。谢谢!
【问题讨论】:
标签: ms-access-2010
我想创建一个查询,该查询仅在两个字段具有匹配数据时才查找和删除重复项。并不意味着这两个字段完全匹配,例如字段 A 和字段 B 都具有“未处理”,但从某种意义上说,表中的两条记录在字段 A 中具有“1234”并且在字段 B 中具有“未处理”,那么整行记录应该被删除,只有最旧的记录(明显更靠近列标题的记录)将保留在表中。
希望这是有道理的。谢谢!
【问题讨论】:
标签: ms-access-2010
与往常一样,请务必在执行任何删除操作之前备份您的访问数据库。
注意,您可以通过切换到查询的“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”),该主键从低数字开始自动编号,并计数到更高。
【讨论】: