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

时间:2016-01-27 17:26:41

标签: database ms-access ms-access-2010

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

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

enter image description here

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

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

1 个答案:

答案 0 :(得分:0)

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

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

这将为您提供每个记录的ProfileID。

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

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

现在,您可以查询应从数据集中排除的每条记录。如果要永久删除所有这些记录,请运行DELETE查询,将内部表连接到pNoMatchQuery:

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

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