从具有相同ID的表中删除重复行

4
我有一个名为Emp的表格,其中记录如下:
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)行受影响”的结果。

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

你是想要删除它们还是想要获取不同记录的计数?对于后者,你可以使用distinct关键字。 - Farax
1
可能是重复的问题:如何删除重复行? - t-clausen.dk
2个回答

6

对于sqlserver 2005及以上版本:

测试数据:

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')

删除语句(用您的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

-3
**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的 - 请参见标签。 - Peter B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接