我有一个Access数据库表,有时包含重复的ProfileID。我想创建一个查询,排除重复记录中的一个(或更多,如果需要)。
要排除重复记录的条件是:如果PriceBefore和PriceAfter字段不相等,则认为它们是重复的。如果它们相等,则重复字段仍然存在。
在上面的示例表中,ID为7和8的记录具有相同的ProfileID。对于ID 8,PriceBefore和PriceAfter 不相等,因此应从查询中排除此记录。对于ID 7,两者是相等的,所以它仍然存在。另请注意,ID 4的PriceBefore和PriceAfter是相同的,但由于ProfileID不是重复的,因此记录必须保留。
最好的方法是什么?如有必要,我很乐意使用多个查询。
答案 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在您从源表中删除任何内容之前返回您所期望的内容,因为一旦它消失了它就会消失(除非您首先进行备份,我会在您运行之前强烈建议删除第一次。)