`
wandejun1012
  • 浏览: 2736835 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何删除完全重复的数据

 
阅读更多

下面仅讲在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 表名);

drop table 正式表;

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

drop table 临时表;


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

临时表将数据导入正式表中,如下:

INSERT INTO t_table_bak

select distinct * from t_table;


参考URL:http://fanqiang.chinaunix.net/db/oracle/2006-06-01/4394.shtml

 

分享到:
评论

相关推荐

    删除表中重复数据sql语句

    ### 删除表中重复数据SQL语句详解 #### 一、基础知识概述 在数据库管理中,重复数据是一个常见的问题,尤其当数据库经历长时间的数据输入时,可能会出现数据录入错误或者批量导入过程中导致的数据冗余。重复数据的...

    Oracle删除表中的重复数据

    重复数据的存在不仅会占用额外的存储空间,还可能导致数据统计错误、数据分析偏差等问题,因此,有效地删除表中的重复数据是保持数据质量和提高数据库性能的重要环节。本文将详细解析如何在Oracle中删除表中的重复...

    sqlServer删除重复数据

    SQL Server 删除重复数据 SQL Server 删除重复数据是数据库管理中的一项重要任务。重复数据可能是完全重复的记录,也可能是部分关键字段重复的记录。删除重复数据可以使用多种方法,包括使用 SELECT DISTINCT 语句...

    数据库 查询删除重复数据

    "数据库查询删除重复数据" 数据库查询删除重复数据是数据库管理中的一项重要操作,旨在查找和删除表中的重复记录。重复记录是根据单个字段或多个字段来判断的。下面介绍几种查找和删除重复记录的方法。 根据单个...

    ArcGIS10 删除完全重复面

    "ArcGIS10 删除完全重复面"这个主题涉及到一个常见的数据清洗任务,即识别并移除地图覆盖范围内的完全相同的面要素。ArcGIS是Esri公司开发的一款强大的地理信息系统软件,它提供了丰富的工具和功能来处理地理数据。...

    sql去掉重复的数据 完全相同的数据去掉重复 及优化

    这些重复数据的存在不仅会占用不必要的存储空间,还可能导致数据分析结果失真。因此,了解并掌握如何有效地删除这些重复记录是非常必要的。 #### 二、SQL去重的基本方法 ##### 2.1 使用`DISTINCT` 最简单的方式是...

    oracle中如何删除重复数据

    在Oracle数据库中,删除重复数据是一项常见的数据清洗任务,尤其当表设计不当时,重复数据可能导致数据不一致和分析错误。以下将详细解释如何在Oracle中处理这两种类型的重复数据问题:部分字段重复和完全重复记录。...

    oracle中如何删除重复的数据

    本文将详细探讨两种情况下的重复数据删除方法:部分字段重复和完全重复记录。 1. 部分字段重复数据的删除 部分字段重复意味着表中有两行或多行记录在某些特定字段上具有相同的值,但不一定是所有字段都相同。首先...

    Kettle的去除完全重复数据、Kettle的去除不完全重复数据、Kettle的使用js代码组件【ktr源文件】

    Kettle的去除完全重复数据、Kettle的去除不完全重复数据、Kettle的使用js代码组件【ktr源文件】 本次实验内容如下: 1. 掌握基于Kettle的去除完全重复数据 2. 掌握基于Kettle的去除不完全重复数据 3. 掌握基于...

    Fme下删除矢量数据重复点

    同一个文件的点数据完成重复,通过FME删除矢量数据重复点数据!

    重复数据删除技术源代码C语言

    在IT领域,重复数据删除(Data Deduplication)是一种高效的数据存储策略,它通过识别并消除数据存储中的冗余信息来节省存储空间。本技术在云计算、备份、归档等领域广泛应用,尤其对于处理大量数据的场景,其效果尤...

    如何高效删除Oracle数据库中的重复数据

    1. **定义**:重复数据是指数据库表中存在多个完全相同的记录。 2. **影响**: - 占用不必要的存储空间。 - 增加了备份数据的时间与成本。 - 可能导致数据处理或分析结果不准确。 - 降低系统性能。 #### 二、...

    ArcGIS10 删除完全重复线

    "ArcGIS10 删除完全重复线"这个主题涉及到一个常见的数据清洗任务,即识别并移除地图数据中的完全重复线段。ArcGIS10是Esri公司推出的一款强大的桌面GIS软件,它提供了丰富的数据处理工具和功能,包括数据建模和数据...

    oracle下如何删除重复数据的几种方法

    ### Oracle 下删除重复数据的方法及分析 #### 一、部分字段重复数据的处理 ##### 查询重复数据 在Oracle数据库中,经常会遇到表中存在部分字段重复的情况。为了找到这些重复的记录,我们可以使用以下SQL语句: `...

    查询重复数据sql语句

    1. **重复数据**:指的是在数据表中存在多条完全相同的记录。 2. **唯一性**:为了确保数据的准确性,通常会设置某些字段为唯一,例如主键。 3. **SQL语句**:结构化查询语言(Structured Query Language),用于...

    真伪之辨:评估重复数据删除解决方案

    【重复数据删除技术详解】 重复数据删除是一种存储优化技术,旨在减少存储系统中冗余数据的占用空间。这种技术的核心是识别和消除重复的数据对象,从而节省存储资源。在传统存储环境中,即使数据对象完全相同,也会...

    oracle 查询重复数据

    在数据库术语中,重复数据通常指的是在数据集中存在一个或多个字段完全相同的记录。这种现象可能由数据录入错误、系统故障、数据导入问题或业务流程设计不当等原因造成。重复数据不仅占用额外的存储空间,还可能导致...

    sqlite避免重复插入数据

    这种方法会在遇到重复数据时先删除原有的记录,然后再插入新的记录。这对于需要更新现有记录的情况非常有用。 #### 4. 实际应用案例 假设有一个简单的应用,用于管理用户登录信息,包括用户名和密码。为了避免...

    删除数据表中重复记录

    ### 删除数据表中重复记录 #### 知识点概述 在数据库管理中,经常会遇到需要清理数据表中重复记录的情况。这些重复记录不仅会占用不必要的存储空间,还可能导致数据分析时出现错误的结果。本文将详细介绍如何在...

Global site tag (gtag.js) - Google Analytics