在Oracle删除重复数据的实际操作过程中,有时会出现这种的相关情况,就是某个表因为原来设计的不周全,导致现在表里面的某些数据重复,针对这一情况我们应如何对真些重复的数据进行删除呢?
重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。
一、对于部分字段重复数据的删除
先来谈谈如何查询重复的数据吧。
下面语句可以查询出那些数据是重复的:select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1
将上面的>号改为=号就可以查询出没有重复的数据了。
想要删除这些重复的数据,可以使用下面语句进行Oracle删除重复数据
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删除重复数据的操作要比直接用一条语句进行删除要高效得多。
这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。
在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最大之外的其他重复的数据了。
由此,我们要Oracle删除重复数据,只保留最新的一条数据,就可以这样写了:
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 表名
可以将查询的记录放到临时表中,然后再将原来的表记录Oracle删除重复数据,最后将临时表的数据导回原来的表中。如下:
CREATE TABLE 临时表 AS (select distinct * from 表名); drop table 正式表; insert into 正式表 (select * from 临时表); drop table 临时表;
如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从临时表将数据导入正式表中,如下:
- INSERT INTO t_table_bak select distinct * from t_table;
以上的相关内容就是对@@@@@@@的介绍,望你能有所收获。
分享到:
相关推荐
### Oracle删除重复记录性能分析 #### 一、背景与需求 在数据库管理中,经常会遇到数据清理的需求,尤其是在Oracle数据库中处理重复记录时。本文旨在通过对比几种不同的方法来删除Oracle中的重复记录,并分析其...
在Oracle SQL中,删除重复数据并保留最新日期的实例是一个常见的数据清理任务,尤其是在具有历史记录或事务数据的数据库中。这个实例展示了如何通过SQL查询有效地处理这种情况。在这个例子中,我们有一个名为`abc`的...
### Oracle中如何删除重复的记录 在Oracle数据库中,数据的完整性是非常重要的。有时,由于各种原因(如数据导入错误、系统故障等),数据库表中可能会出现重复的记录,这不仅浪费存储空间,还可能导致查询结果不...
Oracle数据库重复数据删除技术是一种高效的数据管理策略,其核心优势主要体现在以下几个方面: 1. **更大的备份容量**:Oracle数据库的重复数据删除技术通过识别并消除备份数据中的冗余部分,显著减少了所需的存储...
根据上述需求,可以使用如下SQL语句来删除重复的非主键记录: ```sql DELETE FROM amsys_holiday_apply_info ha WHERE rowid NOT IN ( SELECT MIN(hb.rowid) FROM amsys_holiday_apply ha1 JOIN amsys_holiday_...
总结来说,基于重复数据删除的Oracle数据库备份系统是一种创新的解决方案,它有效地解决了大数据背景下备份存储空间紧张的问题,同时增强了数据安全性和备份恢复速度。通过应用这种技术,企业能够更经济、高效地管理...
### SQLServer与Oracle数据迁移方案知识点详述 #### 前言 在信息化时代背景下,企业数据业务量急剧增加,对数据库的安全性、稳定性和高效性的需求也达到了前所未有的高度。许多快速成长的企业发现,其早期开发的...
如果你正在使用Oracle Spatial数据库存储空间数据,这个工具箱可能包含一些专门针对Oracle的删除重复点解决方案。 总的来说,通过熟练掌握ArcGIS10的数据建模和管理工具,你可以有效地维护和优化你的GIS数据,确保...
- **定义与原理**:全局重复数据消除是一种在多个数据源之间识别和删除重复数据副本的过程。EMC Avamar通过将数据分割成较小的数据段,并在这些段之间查找重复项来实现这一点。 - **技术优势**:这种方法极大地减少...
本资源"Delphi找出数据库重复数据"提供了一个解决方案,帮助开发者高效地定位并处理这些重复信息。 首先,我们需要理解什么是数据库中的重复数据。重复数据通常指的是在特定字段或一组字段中存在完全相同的记录,这...
本文将围绕“Oracle语句优化方案”这一主题,结合提供的描述和部分内容,深入探讨多种有效的优化策略,旨在帮助读者理解并掌握SQL优化的核心技巧。 #### 选择高效表名顺序 在基于规则的优化器(RBO)中,Oracle...
这个示例中的 `RemoveDuplicates` 函数接受一个 TDataSet 类型的参数,遍历数据集并删除重复记录。请注意,实际使用时,应考虑事务处理以确保数据一致性,同时可能需要添加错误处理机制来处理可能出现的异常。 ...
在数据操作方面,Oracle的内置包提供了文件I/O操作、数据加密解密以及其他特殊操作等常用功能。例如,DBMS_RANDOM包提供了生成随机数的功能,而DBMSCRYPTO包则提供了加密和解密数据的功能。 4. 实现数据同步和定时...
在数据库管理中,重复记录可能会影响数据的准确性与一致性,因此需要进行清理。本文将详细介绍如何处理两种类型的重复记录:完全重复和部分关键字段...在实际操作中,应确保对数据进行备份,避免误操作造成数据丢失。
ORACLE EBS系统的主数据管理覆盖了物料、供应商、客户等多个维度,为企业提供了全面的数据管理解决方案。通过对这些核心知识点的理解和应用,企业能够实现更加高效、精确的业务运营。然而,深入掌握每个属性的具体...
6. **DelRepeateProOracle**:这个文件名可能是删除重复存储过程的工具或脚本。在Oracle环境中,可能存在同名但内容不同的存储过程,识别并删除冗余或无用的版本是数据库清理的重要步骤。 7. **执行步骤**:删除...
2. **删除重复数据**: 删除除了自动编号外其他字段都相同的学生冗余信息,可以使用`DISTINCT`关键字结合`ROW_NUMBER()`窗口函数,或者`GROUP BY`和`HAVING`子句。 ```sql DELETE FROM student WHERE rowid NOT IN...
- **使用Oracle GoldenGate工具**:GoldenGate是一种高性能、低延迟的数据复制解决方案,适用于跨平台、跨版本的数据迁移。通过配置适当的抽取(Extractor)、泵(Pump)和应用(Applier)进程,可以实现数据实时...
Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它为各类企业和组织提供高效的数据存储与管理解决方案。本文将深入探讨“Oracle全套资料”中涉及的关键知识点,包括基础概念、SQL语言、PL/SQL编程...
通过这个试题集,考生可以系统地复习Oracle 11g的所有核心概念和操作,提高应对实际工作和考试的能力。每个章节的重复内容可以帮助巩固记忆,确保对各个知识点有深入的理解。对于希望获得Oracle 11g OCP认证的人来说...