访问:如果两个字段相同则删除重复项

Access: Removing a duplicate if two fields are the same

我有一个 Access 数据库 table,它有时包含重复的 ProfileID。我想创建一个排除一个(或多个,如果需要)重复记录的查询。

排除重复记录的条件是:如果 PriceBefore 和 PriceAfter 字段不相等,则认为它们是重复的。如果它们相等,则保留重复字段。

在上面的示例table中,ID 为 7 和 8 的记录具有相同的 ProfileID。对于 ID 8,PriceBefore 和 PriceAfter 相等,因此应该从查询中排除该记录。对于 ID 7,两者相等,因此保留。另请注意,ID 4 的 PriceBefore 和 PriceAfter 相同,但由于 ProfileID 不重复,因此记录必须保留。

最好的方法是什么?如有必要,我很乐意使用多个查询。

创建指针查询。称它为 pQuery:

SELECT ProfileID, Sum(1) as X
FROM MyTableName
HAVING Sum(1) > 1

这将为您提供每条记录的配置文件 ID,这些记录是欺骗的一部分。

接下来,查找价格不匹配的记录。调用这个 pNoMatchQuery:

SELECT MyTableName.*
FROM MyTableName
INNER JOIN pQuery
ON pQuery.ProfileID = MyTableName.ProfileID
WHERE PriceBefore <> PriceAfter

您现在可以查询应从数据集中排除的每条记录。如果您想永久删除所有这些记录,运行 一个 DELETE 查询,您可以在其中将源 table 加入到 pNoMatchQuery:

Delete MyTableName.*
From MyTableName
Where Exists( Select 1 From pNoMatchQuery Where pNoMatchQuery.ID = MyTableName.ID ) = True

首先,在从源中删除任何内容之前,绝对确保 pQuery 和 pNoMatchQuery 返回您期望的内容 table,因为一旦它消失,它就永远消失了(除非您先进行备份,我强烈建议您 运行 删除第一次)。