在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么删除这些重复没有用的数据呢?

重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等。 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle数据库重复数据删除技术有如下优势:更大的备份容量、数据能得到持续验证、有更高的数据恢复服务水平、方便实现备份数据的容灾。
    一、删除部分字段重复数据
先来谈谈如何查询重复的数据吧。
下面语句可以查询出那些数据是重复的:
select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
将上面的>号改为=号就可以查询出没有重复的数据了。
想要删除这些重复的数据,可以使用下面语句进行删除
delete from 表名 a where 字段1,字段2 in
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:
CREATE TABLE 临时表 AS
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
上面这句话就是建立了临时表,并将查询到的数据插入其中。
下面就可以进行这样的删除操作了:
delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);
这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。
这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。
在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,
我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。
下面是查询重复数据的一个例子:
select a.rowid,a.* from 表名 a    
where a.rowid !=    
(    
select max(b.rowid) from 表名 b    
where a.字段1 = b.字段1 and    
a.字段2 = b.字段2    
)

下面我就来讲解一下,上面括号中的语句是查询出重复数据中rowid最大的一条记录。

而外面就是查询出除了rowid最大之外的其他重复的数据了。
由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:
delete from 表名 a    
where a.rowid !=    
(    
select max(b.rowid) from 表名 b    
where a.字段1 = b.字段1 and    
a.字段2 = b.字段2    
)

随便说一下,上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。

create table 临时表 as    
select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;    
delete from 表名 a    
where a.rowid !=    
(    
select b.dataid from 临时表 b    
where a.字段1 = b.字段1 and    
a.字段2 = b.字段2    
);    
commit;
二、完全删除重复记录
对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:
select distinct * from 表名
可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:
CREATE TABLE 临时表 AS (select distinct * from 表名);

truncate table 正式表; --注:原先由于笔误写成了drop table 正式表;,现在已经改正过来

insert into 正式表 (select * from 临时表);

drop table 临时表;

如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从临时表将数据导入正式表中,如下

INSERT INTO t_table_bak    
select distinct * from t_table;

三、怎样快速删除oracle数据库

最快的方法就进入注册表 在运行……里输入regedit.
依次展开HKEY_LOCAL_MACHINE SOFTWARE
找到ORACLE节点。删除。
然后删除ORACLE数据文件,安装的时候选的路径。
最后删除oracle引导文件,在系统盘符的Program Files 里面删除oracle文件夹。

本文出自 “牛海彬的博客” 博客,请务必保留此出处http://newhappy.blog.51cto.com/381292/136974

转载于:https://blog.51cto.com/greenday/410490

Oracle数据库重复数据删除的三种情况相关推荐

  1. C++必须使用【初始化列表】初始化数据成员的三种情况

    类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员: 2.进入构造函数后在构造函数中执行一般赋值与计算. 使用初始化列表有两个原因: 原因1.必须这样做: < ...

  2. oracle数据库备份方法主要有哪几种,Oracle数据库备份方法有哪三种?

    Oracle数据库的备份方法很多,无论使用那种备份方法,备份的目的都是为了在出现故障后能够以尽可能小的时间和代价恢复系统.比如使用export实用程序导出数据库对象.使用Oracle备份数据库.使用O ...

  3. oracle分页的方法,Oracle数据库分页的集中方法(三种方法)

    在 做项目中用到了分页,下面说一下oracle分页的方法; 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; ...

  4. 通过exp命令对Oracle数据库进行备份操作(提供两种情况的备份:备份本地,备份远程的数据库)

    通过exp命令可以对Oracle数据库进行备份操作,其命令含义是:exp 用户名/密码@数据库所在ip地址:数据库端口号/数据库的service-name file=存储到的位置 exp MISPS/ ...

  5. JSON数据解析的三种情况+pjson的方式

    直接解析JavaScript中的json字符串 <!-- 解析页面内的字符串 --> <div align="center"><table class ...

  6. 【转贴】Oracle查询重复数据与删除重复记录方法

    Oracle查询重复数据与删除重复记录方法 比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 select p1.* from persons ...

  7. mysql double 转 字符串_没想到!在MySQL数据库中的数据有这三种类型!

    MySQL数据库是一个或多个数据列构成二维表,它的每一种数据列都有特定类型,而类型决定MySQL是怎么看待该列数据,如果把整型数值存放到字符类型的列中,MySQL则会把它当成字符串来处理. MySQL ...

  8. c++删除数组中重复元素_PG13中的功能—B树索引中的重复数据删除

    PostgreSQL 13 Beta 1版本于2020年5月21日发布,PostgreSQL 13 Beta 2版本于2020年6月25日发布.虽然Beta 版本中依旧包含一些错误,但是它总是几乎涵盖 ...

  9. Access数据库重复记录删除器 V1.04免费注册版

    名称:Access数据库重复记录删除器 V1.04免费注册版 版本:1.04 软件大小:1.8M 软件语言:中文 软件授权:共享版 应用平台:WinAll Access数据库重复记录删除器是一款非常好 ...

最新文章

  1. Spring思维导图(MVC篇)
  2. Technical news July-11
  3. LeetCode 666. 路径和 IV(树的遍历)
  4. 计算机系统结构名词解释
  5. 【BZOJ】[SDOI2009]HH的项链
  6. VS2005 工程在win7下使用管理员权限运行
  7. php move函数,php – 在null上调用成员函数move()
  8. 校园网客户端没有linux版,Linux版校园网客户端公测中(已添加GUI输入窗口)njit-clent...
  9. EditPlus中配置JSON格式化功能
  10. 微信小程序开发 网络异常监听
  11. less和css的区别是什么
  12. todo已完成任务_我已经完成了自己该做的任务用英文怎么
  13. 空间点过程与随机测度(一):从数星星说起
  14. 行人轨迹论文阅读SSAGCN: Social Soft Attention Graph Convolution Network for Pedestrian Trajectory Prediction
  15. 怎么更改锁定计算机背景图片,电脑锁屏背景图片如何更改
  16. mysql 格式化函数总结_Mysql字符串处理函数详细介绍、总结
  17. 绘制线性回归和多元线性回归
  18. php获取文件夹下所有文件名(php遍历目录)
  19. 【资损】资损防控的系统规范-收单类服务设计
  20. 安徽科技学院 信网学院网络文化节 张乐

热门文章

  1. 建筑施工承插型盘扣式钢管支架安全技术规程_承插型盘扣式钢管支架施工技术交底(视频教程)...
  2. 怎样对php使用systemctl启动,Centos7 配置php-fpm服务到systemctl
  3. 数据库设计_SQL数据库设计(数据建模)
  4. 解决ubuntu下不能mount windows 盘的问题
  5. make though multi core
  6. 【java】swing窗口中JPanel和JFrame的应用
  7. 教你把gps服务器修改为中国加速搜星,Android的GPS加速搜星的原理和方法
  8. java jdk运行_java运行机制、Jdk版本及Java环境变量
  9. QQ浏览器视频相似度算法
  10. 如何用tf2.0训练中文聊天机器人chatbot