当前位置: 首页 > news >正文

Oracle数据库重复数据删除的三种情况

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

    重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等。 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。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://database.csdn.net/page/4890b2e8-e47b-4197-b263-68242dbf036e

相关文章:

  • 优化数据库大幅度提高Oracle的性能
  • java容器类
  • Oracle表连接方式之等值连接、外部连接
  • eclipse环境下,java操作MySQL的简单演示
  • 牛人博客链接
  • oracle执行计划相关概念
  • 日常(委屈到爆炸)
  • oracle SQL表执行路径(表扫描方式)
  • 并发编程(四):ThreadLocal从源码分析总结到内存泄漏
  • 表之间的连接
  • 【剑指Offer面试题】九度OJ1384:二维数组中的查找
  • 查看执行计划
  • oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101
  • 如何改变oracle的执行计划(HINT)
  • 【Java线程】SwingWorker的用法
  • 【个人向】《HTTP图解》阅后小结
  • 2018一半小结一波
  • AHK 中 = 和 == 等比较运算符的用法
  • angular2 简述
  • CAP 一致性协议及应用解析
  • log4j2输出到kafka
  • npx命令介绍
  • PHP变量
  • React-Native - 收藏集 - 掘金
  • SQL 难点解决:记录的引用
  • Vue UI框架库开发介绍
  • 搭建gitbook 和 访问权限认证
  • 我的面试准备过程--容器(更新中)
  • 新书推荐|Windows黑客编程技术详解
  • 学习笔记:对象,原型和继承(1)
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • #{}和${}的区别是什么 -- java面试
  • #QT(TCP网络编程-服务端)
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (2024,RWKV-5/6,RNN,矩阵值注意力状态,数据依赖线性插值,LoRA,多语言分词器)Eagle 和 Finch
  • (4)logging(日志模块)
  • (7)svelte 教程: Props(属性)
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (floyd+补集) poj 3275
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四)JPA - JQPL 实现增删改查
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • .htaccess 强制https 单独排除某个目录
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .考试倒计时43天!来提分啦!
  • @SpringBootApplication 包含的三个注解及其含义
  • @Transactional事务注解内含乾坤?
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [2023年]-hadoop面试真题(一)
  • [4.9福建四校联考]