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

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

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

  1. create table my_users(
  2. id number,
  3. username varchar2(20),
  4. sal number
  5. )

2.插入测试数据

  1. begin
  2. for i in 1..10 loop
  3. insert into my_users values(i,'carl_zhang',i+10);
  4. end loop;
  5. end;
  6.  
  7. begin
  8. for i in 1..10 loop
  9. insert into my_users values(i,'carl_zhang',i+20);
  10. end loop;
  11. end;
  12.  
  13. insert into my_users values(100,'carl',20.3);
  14.  
  15. commit;

3.查看重复记录

  1. select rowid,rownum,a.* from my_users a
  2. where 1=1
  3. and exists(
  4. select 'exist' from my_users b
  5. where 1=1
  6. and a.id=b.id
  7. and a.username=b.username
  8. having count(*)>1
  9. )
  10. order by rowid

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

  1. select rowid,rownum,a.* from my_users a
  2. where 1=1
  3. and exists(
  4. select 'exist' from my_users b
  5. where 1=1
  6. and a.id=b.id
  7. and a.username=b.username
  8. -- having count(*)>1
  9. having count(*)>1 and a.rowid=max(b.rowid)
  10. )
  11. order by rowid

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

  1. delete from my_users a
  2. where 1=1
  3. and exists(
  4. select 'exist' from my_users b
  5. where 1=1
  6. and a.id=b.id
  7. and a.username=b.username
  8. -- having count(*)>1
  9. having count(*)>1 and a.rowid=max(b.rowid)
  10. )

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

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

  1. select rowid,rownum,a.* from my_users a
  2. where 1=1
  3. and (a.id,a.username) in(
  4. select b.id,b.username from my_users b
  5. where 1=1
  6. having count(*)>1
  7. group by b.id,b.username
  8. )
  9. order by rowid

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

  1. select rowid,rownum,a.* from my_users a
  2. where 1=1
  3. and (a.id,a.username,rowid) in(
  4. select b.id,b.username,max(rowid) from my_users b
  5. where 1=1
  6. having count(*)>1
  7. group by b.id,b.username
  8. )
  9. order by rowid

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

  1. delete from my_users a
  2. where 1=1
  3. and (a.id,a.username,rowid) in(
  4. select b.id,b.username,max(rowid) from my_users b
  5. where 1=1
  6. having count(*)>1
  7. group by b.id,b.username
  8. )

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

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

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

  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. OC项目中使用Swift

    1.在OC工程中新建 Swift 文件,会提示的是否创建一个桥接文件,创建不创建都无所谓,这个桥接文件主要是用来包含OC头文件的,主要用于Swift中使用OC         2.在Person.sw ...

  2. EXTJS 6 新特性(译文)

    Extjs 新特性 简介 使用extjs,sencha 团队开发一个简单的框架,可以为创建在任何类型设备上运行的应用,从手机端到平板电脑再到桌面应用,你将能够产生最佳的用户体验,编写更少的代码量,结合 ...

  3. Java程序员面试宝典——重要习题整理

    1.下面程序的输出结果是() public class Test { public static void main(String[] args) { int j = 0 ; for(int i = ...

  4. android屏幕基础知识

    首先,先来上一张图,看看android屏幕分辨率的占比情况 什么是dp,dip,dpi,sp.px ?之间的关系是什么? px:构成图像的最小单位 dp/dip:密度无关像素 以160dpi为基准 1 ...

  5. LoadRunner用户行为模拟器 《第三篇》

    用户行为模拟器简称VU,VU通过运行VU脚本模拟了用户对软件的操作行为.VU是基于网络协议的.很明显,被测服务器是通过各种各样的网络协议与客户端打交道的.VU要“骗过”被测服务器,当然就要遵守这些协议 ...

  6. Landsat8免费下载地址

    一.国外 Landsat8提供免费下载,在USGS上有两个网站,下面介绍的这个网站操作比较方便.这里大赞美国的USGS和NASA机构,不但提供免费下载的数据,而且下载网站制作和维护的非常便捷.废话少说 ...

  7. rem是如何实现自适应中的?

    使用rem 然后根据媒体查询实现自适应.跟使用JS来自适应也是同个道理,不过是js更精确一点.使用媒体查询: html { font-size: 62.5% } @media only screen ...

  8. 跨域请求之JSONP 三

    script请求返回JSON实际上是脚本注入.它虽然解决了跨域问题,但它不是万能的. 不能接受HTTP状态码 不能使用POST提交(默认GET) 不能发送和接受HTTP头 不能设置同步调用(默认异步) ...

  9. web.config中sessionState节点的配置方案

    web.config中sessionState节点的配置方案 web.config关于sessionState节点的配置方案,sessionState有五种模式:Custom,off,inProc,S ...

  10. C++三大库boost、loki、stlport

    转: STL是一个标准,各商家根据这个标准开发了各自的STL版本.而在这形形色色的STL版本中,SGI STL无疑是最引人瞩目的一个.这当然是因为这个STL产品系出名门,其设计和编写者名单中,Alex ...