2016-01-27 33 views
0

我有一個Access數據庫表,有時包含重複的ProfileID。我想創建一個排除重複記錄的一個(或多個,如果需要)的查詢。訪問:刪除重複,如果兩個字段相同

要排除重複記錄的條件是:如果PriceBefore和PriceAfter字段不相等,則它們被認爲是重複的。如果它們相同,則重複字段保持不變。

enter image description here

在該示例表格上方,與ID 7和8中記錄具有相同ProfileID的。對於ID 8,PriceBefore和PriceAfter是而不是相等,因此應將此記錄從查詢中排除。對於ID 7,兩者是平等的,所以它仍然存在。另請注意,PriceBefore和PriceAfter代碼4相同,但由於ProfileID不重複,記錄必須保留。

這樣做的最好方法是什麼?如果需要,我很樂意使用多個查詢。

回答

0

創建一個指針查詢。稱之爲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 

現在您已經查詢了應從數據集中排除的每條記錄。如果你想永久刪除所有的這些記錄,運行刪除查詢,你內加入您的源表pNoMatchQuery:

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

首先,絕對確保pQuery和pNoMatchQuery正在返回你刪除任何東西之前,你期待什麼從你的源表中刪除,因爲一旦它消失,它就會消失(除非你首先進行備份,在第一次運行刪除之前我會強烈建議)。