在Access 2003中删除重复项

Mr_*_*imp 6 ms-access duplicates

我有一个Access 2003表,有大约4000条记录,由17个不同的表组成.这些记录中大约有一半是重复的.没有唯一的标识列(id,name等).有一个id列在表结合时自动填充,意味着重复项不完全相同(尽管如果它使事情变得容易,可以删除此列).

我使用了Access Find Duplicates查询向导,该向导为我提供了重复记录的列表,但不允许我删除它们(如果我不能删除它们,请认真使用此查询?).我已经尝试将生成的查询转换为删除查询,但这会更改它找到的行数.我会手动更改sql,但它有点超出我并且长7行.

有谁知道摆脱重复的好方法?

Dal*_*ale 7

查找重复查询的原因不允许您删除记录是因为它基本上只是一个聚合查询,它计算它找到的重复数,并返回计数大于1的情况.

考虑一下,如果您确实根据查找重复项进行了删除查询,它将删除所有具有重复值的行,这可能不是您想要的.您想要删除除一个重复之外的所有重复项.

您应尝试删除除一个记录之外的所有记录重复项,不包括比较中的ID列.我建议最简单的方法是对所有唯一值(从MyTable中选择Distinct Field1,Field2 ...)进行生成表查询,而不是ID字段以外的每个字段,使用a中的结果创建一个包含大约2000条记录的新表(如果一半是重复的).

然后,在新表上创建一个ID列,使用更新查询将此ID更新为原始表中的第一个匹配ID(您可以使用DLookup执行此操作,这将返回DOMAIN中CRITERIA为真的第一个EXPRESSION值) .

即使多个记录满足条件,DLookup()函数也会从单个字段返回一个值.如果没有记录满足条件,或者域没有记录,则DLookup()返回Null.

由于您基于所有其他字段(唯一值)识别第一个匹配ID,因此不匹配的ID将属于重复项.您将颠倒PK关系,在给定一组唯一字段的情况下识别第一个匹配键.之后,您应该将ID设置为PK.当然,这假设ID没有固有含义,并且您不关心将给定重复行的一个特定ID保留在属于其他重复行的任何ID上.这假设您关心ID列中的数据,因此您希望为所有剩余行保留它,否则只需忽略DLookup步骤并对除ID之外的所有列执行Select Distinct.

  • 是的,它已经复制了所有行.除非需要保留所有行的ID,否则不需要执行DLookup位. (2认同)