初探oracle删除重复记录,只保留rowid最小的记录

 

如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序)

一、删除重复记录可以使用多种方法,如下只是介绍了两种方法(exist和in两种)。

1.首先创建一个测试表。

create table my_users(
id number,
username varchar2(20),
sal number
)

2.插入测试数据

begin
for i in 1..10 loop
insert into my_users values(i,'carl_zhang',i+10);
end loop;
end; begin
for i in 1..10 loop
insert into my_users values(i,'carl_zhang',i+20);
end loop;
end; insert into my_users values(100,'carl',20.3); commit;

3.查看重复记录

select rowid,rownum,a.* from my_users a
where 1=1
and exists(
select 'exist' from my_users b
where 1=1
and a.id=b.id
and a.username=b.username
having count(*)>1
)
order by rowid

4.查看重复数据中,rowid最大的记录(rowid可以反映数据插入到数据库中的顺序)

select rowid,rownum,a.* from my_users a
where 1=1
and exists(
select 'exist' from my_users b
where 1=1
and a.id=b.id
and a.username=b.username
-- having count(*)>1
having count(*)>1 and a.rowid=max(b.rowid)
)
order by rowid

5.删除重复数据,保留rowid最小的记录

delete  from my_users a
where 1=1
and exists(
select 'exist' from my_users b
where 1=1
and a.id=b.id
and a.username=b.username
-- having count(*)>1
having count(*)>1 and a.rowid=max(b.rowid)
)

二、以上方法是通过exist实现,相比in、not in更加的快速。

1.如下,查看重复记录。

select rowid,rownum,a.* from my_users a
where 1=1
and (a.id,a.username) in(
select b.id,b.username from my_users b
where 1=1
having count(*)>1
group by b.id,b.username
)
order by rowid

2.查看重复数据中,rowid最大的记录

select rowid,rownum,a.* from my_users a
where 1=1
and (a.id,a.username,rowid) in(
select b.id,b.username,max(rowid) from my_users b
where 1=1
having count(*)>1
group by b.id,b.username
)
order by rowid

3.删除重复数据,保留rowid最小的记录

delete from my_users a
where 1=1
and (a.id,a.username,rowid) in(
select b.id,b.username,max(rowid) from my_users b
where 1=1
having count(*)>1
group by b.id,b.username
)
 
分类: oracle
标签: 数据库

oracle删除重复记录,只保留rowid最小的记录的更多相关文章

  1. 初探oracle删除重复记录,只保留rowid最小的记录

    如题,初探oracle删除重复记录,只保留rowid最小的记录(rowid可以反映数据插入到数据库中的顺序) 一.删除重复记录可以使用多种方法,如下只是介绍了两种方法(exist和in两种). 1.首 ...

  2. oracle删除重复数据只保留一条

    -- 如表role_user的数据 ROLEID USERID -- 删除相同记录只剩下一条记录 根据两个字段查询重复数据 (roleid,userid) ) 删除重复数据只保留一条 delete f ...

  3. Mysql 删除重复数据只保留id最小的

    DELETE FROM 表 WHERE id NOT IN ( SELECT id FROM ( SELECT min(b.id) AS id FROM 表 b GROUP BY b.重复字段 ) b ...

  4. mysql 删除重复数据只保留一条记录

    删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id fr ...

  5. Oracle 删除重复数据只留一条

    查询及删除重复记录的SQL语句   1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断   select * from 表 where Id in (select Id from 表 g ...

  6. SQL删除重复数据只保留一条

    用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...

  7. Oralce中SQL删除重复数据只保留一条(转)

    用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 .查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select ...

  8. MySQL中删除重复数据只保留一条

    用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT ...

  9. SQL查找 删除重复数据只保留一条

    --用SQL语句,删除掉重复项只保留一条 --在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 --1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 ...

随机推荐

  1. 【世外桃源】福音节目 swtychina.com

    [世外桃源]福音节目 今天小编满怀热情,带着激动地心情,颤抖的双手,以“大无畏的精神,高山仰止的情操”为大家郑重推荐很好的一个福音节目: <世外桃源>, 哎,不对,貌似从2013年初开始& ...

  2. AFHTTPRequestOperationManager当一个网络请求加入菊花

    问: Can you help me to understand, how to use UIActivityIndicatorView+AFNetworking or UIProgressView+ ...

  3. JAVA学习笔记 -- 包资源文件jar包裹

    初学者GUI,使用Eclipse出口jar包裹,不能显示最小化的图标集(hello.png根文件下的项目文件夹文件).码如下面: import javax.swing.JFrame; import j ...

  4. Effective C++ -- 继承和面向对象设计

    32.确保你的public继承了模is-a关系 public继承意味着is-a关系(里氏替换原则),一切适用于基类也适用于派生类. 矩形继承正方形问题: 可实施与矩形的操作无法实施与正方形 在编程领域 ...

  5. JAVA: httpclient 详细说明——第四章;

    httpclient 具体解释--第一章. httpclient 具体解释--第二章: httpclient 具体解释--第三章: httpclient 具体解释--第四章: httpclient 具 ...

  6. Visual Studio 原生开发的10个调试技巧(二)

    原文:Visual Studio 原生开发的10个调试技巧(二) 我以前关于 Visual Studio 调试技巧的文章引起了大家很大的兴趣,以至于我决定分享更多调试的知识.以下的列表中你可以看到写原 ...

  7. Python网络01 原始Python服务器

    原文:Python网络01 原始Python服务器 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人 ...

  8. java中 try return finally return(转)

    finally块里面的代码一般都是会执行的,除非执行 System.exit(int),停止虚拟机,断电. 1.若try代码块里面有return ,假设要return 的值 是A,A为基本类型或者被f ...

  9. hdu 5076 最小割灵活运用

    这意味着更复杂的问题,关键的事实被抽象出来:每个点,能够赋予既有的值(挑两个一.需要选择,设定ai,bi). 寻找所有和最大.有条件:如果两个点同时满足: 1,:二进制只是有一个不同之处.  2:中的 ...

  10. Oracle性能优化学习笔记WHERE在连接顺序的条款

     ORACLE自下而上分析顺序WHERE条款,根据这一原理,表之间的连接必须写在其它WHERE先决条件, 这些条件可以过滤掉要被写入记录的最大数目WHERE在条款结束. 比如:        (低效, ...