2013-09-24 251 views
2

表中刪除重複行我有一個表EMP其中有這樣從具有相同的ID

Id  Name 
1  A 
2  B 
3  C 
1  A 
1  A 
2  B 
3  C 

記錄現在我想從表中 刪除重複的行我使用這個查詢來選擇或計數重複記錄的數量

SELECT NameCol, COUNT(*) as TotalCount FROM TestTable 
GROUP BY NameCol HAVING COUNT(*) > 1 
ORDER BY COUNT(*) DESC 

和我應該寫什麼查詢以從表中刪除重複的行。

如果我寫這個查詢來刪除重複記錄,那麼它會給出(0) row Affected結果。

`DELETE FROM TestTable 
    WHERE ID NOT IN (SELECT MAX(ID) FROM 
            TestTable 
            GROUP BY NameCol 
        )` 
+0

您想刪除它們,或者想要使用獲取不同記錄的計數嗎?你可以使用不同的關鍵字爲後者 – Farax

+1

可能的重複[如何刪除重複的行?](http://stackoverflow.com/questions/18932/how-can-i-remove-duplicate-rows) –

回答

4

使用Sql Server 2005+

TESTDATA:

declare @t table(Id int, Name char(1)) 
insert @t values 
(1,'A'),(2,'B'),(3,'C'),(1,'A'),(1,'A'),(2,'B'),(3,'C') 

DELETE語句(與你的EMP表代替@t)

;with a as 
(
select row_number() over (partition by id, name order by id) rn 
from @t 
) 
delete from a where rn > 1 

select * from @t 
1

Here是詳細回答這個問題。您可以按照作者的工作或接受答案的更有效但複雜的工作

-2
**Q How to Remove duplicate data with help of Rowid** 


create table abcd(id number(10),name varchar2(20)) 

insert into abcd values(1,'abc') 

insert into abcd values(2,'pqr') 


insert into abcd values(3,'xyz') 

insert into abcd values(1,'abc') 

insert into abcd values(2,'pqr') 

insert into abcd values(3,'xyz') 


select * from abcd 

id Name 
1 abc 
2 pqr 
3 xyz 
1 abc 
2 pqr 
3 xyz 

Delete Duplicate record but keep Distinct Record in table 

DELETE 
FROM abcd a 
WHERE ROWID > (SELECT MIN(ROWID) FROM abcd b 
WHERE b.id=a.id 
); 

run the above query 3 rows delete 

select * from abcd 

id Name 
1 abc 
2 pqr 
3 xyz 
+2

ROWID是隻有Oracle,而這個問題是關於Sql Server的 - 請參閱標籤。 –