2010-08-02 245 views
0

是否有某種方式可以刪除表中存在的重複記錄。我只希望查詢中刪除一條記錄並將其中的其餘部分刪除。這可以通過查詢完成。 請建議刪除重複記錄

+2

有樣品的例子,但你應該學會這兩個搜索現有的答案和接受回答您存在的問題。 – 2010-08-02 07:06:50

+0

您使用的是什麼RDBMS?你最近的10個問題中有沒有得到滿意的回答?如果是的話,你能接受這些答案嗎? – 2010-08-02 09:15:39

+0

如果你使用MySQL,你可能想從昨天看看這篇文章:http://stackoverflow.com/questions/3383898/remove-duplicates-using-only-a-mysql-query – 2010-08-02 09:39:49

回答

5

試試這個 -

身份加入ID列到表中第一個 -

alter <tablename> add id INT IDENTITY 

然後使用下面的查詢來刪除重複記錄 -

delete 
FROM <tablename> 
WHERE id IN 
(
SELECT MAX(id) 
FROM <tablename> 
GROUP BY <columnnames defining uniqueness> 
having count (*) > 1 
) 

請考慮到,那它只刪除一個現有行的副本。如果存在共享分組條件的三行 - 除非多次執行查詢(直到沒有行被刪除)或更改刪除條件,否則這將不起作用。

0

使用distinct

SELECT distinct * FROM Table .... 
0

這主要取決於你的表結構,約束上的數量已經和列的,如果有任何主鍵的數量。

您需要找到optmized查詢,它將基於上述約束條件來識別唯一記錄,然後最重要的是您需要考慮根據查詢刪除這些重複項所用的時間。

所以沒有人可以發表評論,除非你發佈完整的結構和一些示例重複數據。

希望這個小輸入有幫助。

0

下面是刪除重複記錄

Create table #Test (colA int not null, colB int not null, colC int not null, id int not null identity) on [Primary] 
GO 
INSERT INTO #Test (colA,colB,colC) VALUES (1,1,1) 
INSERT INTO #Test (colA,colB,colC) VALUES (1,1,1) 
INSERT INTO #Test (colA,colB,colC) VALUES (1,1,1) 

INSERT INTO #Test (colA,colB,colC) VALUES (1,2,3) 
INSERT INTO #Test (colA,colB,colC) VALUES (1,2,3) 
INSERT INTO #Test (colA,colB,colC) VALUES (1,2,3) 

INSERT INTO #Test (colA,colB,colC) VALUES (4,5,6) 
GO 
Select * from #Test 
GO 
Delete from #Test where id < 
(Select Max(id) from #Test t where #Test.colA = t.colA and 
#Test.colB = t.colB and 
#Test.colC = t.colC) 
GO 
Select * from #Test 
GO