首页 / ORACLE / 【ORACLE】删除表中重复数据
【ORACLE】删除表中重复数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【ORACLE】删除表中重复数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2058字,纯文字阅读大概需要3分钟。
内容图文
原因
在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来读诸多不便,那么怎么删除这些重复没有用的数据呢?
平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录。
处理方法
重复的数据可能有这样两种情况:
第一种:删除表中所有重复的数据
第二种:只保留重复数据中最新记录的一条记录【工作中常用】
删除重复数据的想法
每一行数据所对应的rowid都是独一无二的,及时表中两个数据完全相同,rowid也是不同的。我们只需要找出重复值的ROWID就可以删除重复值
模拟数据
SCOTT@PROD>Create table test as select * from emp;
SCOTT@PROD>insert into test select * from test;
-
' ref='nofollow'>SCOTT@PROD>insert into test select * from test;
28672 rows created.
Elapsed: 00:00:00.03
删除重复值的所有数据
【方法一】
@?/rdbms/admin/utlexpt1.sql' ref='nofollow'>SCOTT@PROD>@?/rdbms/admin/utlexpt1.sql
产生exceptions表
向test表中加入(主键或是唯一约束)无法成功并把重复值rowid插入exceptions表中
SCOTT@PROD>alter table test add constraint test_empno_pk primary key(empno)
exceptions into exceptions;
SCOTT@PROD>select count(*) from exceptions;
COUNT(*)
----------
28672
删除全部重复数据
SCOTT@PROD>delete from test where rowid in (select row_id from exceptions);
28672 rows deleted.
Elapsed: 00:00:00.28
【方法二】
SCOTT@PROD>delete from test where ename in
( select ename from test group by ename having count(*)>2);
28672 rows deleted.
Elapsed: 00:00:00.34
【方法三】
方法三是建立在方法二的基础上,由于测试数据比较少,我们无法考虑到数据库大量数据的情况,大量删除数据有可能造成会将数据库吊死,所以我们可以将重复值插入到临时表中,然后再对表进行删除
SCOTT@PROD>create table test_temp1
as (select empno,ename from test group by empno,ename having count(*)>2)
SCOTT@PROD>delete from test where (empno,ename) in (select empno,ename from test_temp1);
28672 rows deleted.
Elapsed: 00:00:00.26
删除重复数据保留最新一条
也是利用rowid来对数据进行处理
SCOTT@PROD>delete from test where rowid not in (select max(rowid) from test group by ename);
28658 rows deleted.
Elapsed: 00:00:00.24
创建一个临时表,向表中插入保留的rowid,
SCOTT@PROD>create table temp1(row_id urowid);
SCOTT@PROD>insert into temp1 select max(rowid) from test group by ename;
SCOTT@PROD>delete from test where rowid not in (select row_id from temp1);
28658 rows deleted.
Elapsed: 00:00:00.25
技术是分享,即是提升,也是创新,
文章如有错误,或者不同见解可以联系JAYEWU
微信1048586878 QQ:1048586878
原文:http://www.cnblogs.com/jayewu/p/7241714.html
内容总结
以上是互联网集市为您收集整理的【ORACLE】删除表中重复数据全部内容,希望文章能够帮你解决【ORACLE】删除表中重复数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。