oracle分组引起数据重复,oracle去重复数据方法梳理

http://www.cnblogs.com/252e/archive/2012/09/13/2682817.html

1、Oracle的row_number() over函数消除重复的记录 (此种适用于通过条件排序后再删除,即对删除的记录有条件限制,而不仅是rowid最大或最小或重复的随意一条)

select row_number()over(partition by a order by b) as no,a,b from test; 标识重复数据

delete from test where b in (select b from (select row_number()over(partition by a order by b) as no,a,b from test) where no>1);    通过标识查出来删除

2、通过rowid来判断

select max(rowid) from test group by id having count(*)>1;  --找出重复记录中rowid最大的记录

delete from test where rowid not in (select max(rowid) from test group by id having count(*)>1);            --通过rowid筛选,去掉其他重复的数据(此为筛选删除,会保留rowid最大的一条)    ****(注意:此语句只会保留重复数据中rowid最大的,重复数据中其他的rowid及非重复数据都会被删除)

3、使用分组函数group by

select id,name from test group by id,name having count(id)>1;

delete from test where id in (select id from (select id,name from test group


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部