首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表中删除具有相同Id的重复行

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

Stack Overflow用户
提问于 2013-09-24 17:28:21
回答 2查看 15K关注 0票数 3

我有一个表Emp,它有这样的记录

代码语言:javascript
复制
Id     Name
1      A
2      B
3      C
1      A
1      A
2      B
3      C

现在我想从表中删除重复的行,我正在使用这个查询来选择或计算重复记录的数量

代码语言:javascript
复制
SELECT NameCol, COUNT(*) as TotalCount FROM TestTable 
GROUP BY NameCol HAVING COUNT(*) > 1 
ORDER BY COUNT(*) DESC

我应该写什么查询来从表中删除重复的行。

如果我编写这个查询来删除重复的记录,那么它会给出一个(0) row Affected结果。

代码语言:javascript
复制
`DELETE FROM TestTable 
    WHERE ID NOT IN ( SELECT MAX(ID) FROM 
                                     TestTable 
                                     GROUP BY NameCol
                    )`
EN

回答 2

Stack Overflow用户

发布于 2013-09-24 17:35:00

对于sqlserver 2005+

测试数据:

代码语言:javascript
复制
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语句(将@t替换为Emp表)

代码语言:javascript
复制
;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
票数 5
EN

Stack Overflow用户

发布于 2017-07-03 19:03:32

代码语言:javascript
复制
**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
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18977718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档