`

快速删除重复的记录

 
阅读更多

做项目的时候,一位同事导数据的时候,不小心把一个表中的数据全都搞重了,也就是说,这个表里所有的记录都有一条重复的。这个表的数据是千万级的,而且是生产系统。也就是说,不能把所有的记录都删除,而且必须快速的把重复记录删掉。

 

对此,总结了一下删除重复记录的方法,以及每种方法的优缺点。

为了陈诉方便,假设表名为Tbl,表中有三列col1col2col3,其中col1col2是主键,并且,col1col2上加了索引。

 

1、通过创建临时表

可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:

creat table tbl_tmp (select distinct* from tbl);truncate table tbl;//清空表记录insert into tbl select * from tbl_tmp;//将临时表中的数据插回来。

这种方法可以实现需求,但是很明显,对于一个千万级记录的表,这种方法很慢,在生产系统中,这会给系统带来很大的开销,不可行。

 

2、利用rowid

oracle中,每一条记录都有一个rowidrowid在整个数据库中是唯一的,rowid确定了每条记录是oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同。SQL语句如下:

delete from tbl where rowid in (select a.rowid from tbl a, tbl b where a.rowid>b.rowid and a.col1=b.col1 and a.col2 = b.col2)

如果已经知道每条记录只有一条重复的,这个sql语句适用。但是如果每条记录的重复记录有N条,这个N是未知的,就要考虑适用下面这种方法了。

 

3、利用maxmin函数

这里也要使用rowid,与上面不同的是结合maxmin函数来实现。SQL语句如下

delete from tbl awhere rowid not in (select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);//这里max使用min也可以

 

或者用下面的语句

 

delete from tbl awhere rowid<(select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2);//这里如果把max换成min的话,前面的where子句中需要把"<"改为">"

跟上面的方法思路基本是一样的,不过使用了group by,减少了显性的比较条件,提高效率。

 

SQL语句如下:

deletefrom tbl where rowid not in (select max(rowid) from tbl tgroup by t.col1, t.col2);delete from tbl where (col1, col2) in (select col1,col2 from tblgroup bycol1,col2havingcount(*) >1)and rowidnotin(selectnin(rowid)fromtblgroup bycol1,col2havingcount(*) >1)

 

还有一种方法,对于表中有重复记录的记录比较少的,并且有索引的情况,比较适用。假定col1col2上有索引,并且tbl表中有重复记录的记录比较少,SQL语句如下4、利用group by,提高效率

 

分享到:
评论

相关推荐

    Excel 2021快速删除重复记录的方法.docx

    本教程将详细介绍两种快速删除重复记录的方法:传统方法(使用高级筛选)以及新增的“删除重复项”功能。 ### 一、传统方法:使用高级筛选 高级筛选是Excel中的一个强大功能,它允许用户根据特定条件筛选数据,...

    Excel2021中快速删除重复记录的技巧.docx

    本篇文章将介绍两种快速删除重复记录的方法:使用高级筛选和“删除重复项”功能。 首先,让我们来详细了解一下传统的方法——使用高级筛选: 1. **选择数据范围**:在你需要处理的单元格范围内点击,确保选择的是...

    SQL语句删除重复记录

    优点:这种方法可以快速删除重复记录,且对大型数据库也适用。 缺点:需要创建两个临时表,可能会占用更多的存储空间。 Knowledge Point 2: 使用游标删除重复记录 在这种方法中,我们使用游标来遍历重复记录,并...

    plsql删除重复记录

    ### PL/SQL删除Oracle数据库中的重复记录方法详解 在日常的数据库管理与维护工作中,我们经常会遇到需要处理数据表中的重复记录的情况。特别是在大型企业级应用中,由于各种原因(如数据导入错误、系统故障等),...

    oracle快速删除重复的记录

    Oracle 快速删除重复记录 在 Oracle 数据库中,删除重复记录是一项常见的操作,尤其是在大型数据表中。删除重复记录可以提高数据的准确性和一致性。本文总结了四种删除重复记录的方法,每种方法都有其优缺点。 ...

    基于深度学习的大规模数据库重复记录删除研究.pdf

    3. 高效的计算能力:深度学习算法可以对大规模数据库重复记录数据进行快速计算和处理,提高删除效率。 因此,基于深度学习的大规模数据库重复记录删除方法可以满足重复记录管理的要求,提高数据库管理的效率,减少...

    最高效的删除重复记录方法

    ### 最高效的删除重复记录方法 在数据库管理过程中,删除重复记录是一项常见的需求,尤其是在数据清洗、维护数据一致性等方面。本文将详细介绍一种高效的方法来删除Oracle数据库中的重复记录,并通过具体的SQL语句...

    oracle删除重复记录性能分析

    这种方法利用ROWID属性唯一性来快速定位并删除重复记录。具体SQL语句如下: ```sql DELETE FROM demo a WHERE a.rowid &lt;&gt; (SELECT MAX(rowid) FROM demo b WHERE b.object_id = a.object_id); ``` 该方法通过比较...

    Oracle数据库删除表中重复记录的方法三则.txt

    ### Oracle数据库删除表中重复记录的方法 在Oracle数据库管理中,经常会遇到需要处理表中的重复数据的情况。重复数据不仅会占用不必要的存储空间,还可能导致数据统计错误或业务逻辑混乱等问题。因此,掌握如何有效...

    Oracle查询重复数据与删除重复记录方法(txt)

    ### Oracle查询重复数据与删除重复记录方法 在Oracle数据库中,有时我们需要找出并处理重复的数据。这不仅可以提高数据质量,还能提升查询效率。本文将详细介绍几种常用的查询和删除Oracle数据库中重复记录的方法。...

    Oracle查询重复数据与删除重复记录方法

    ### Oracle查询重复数据与删除重复记录方法 #### 一、查询重复数据 ##### 1. 使用ROWID方法 ROWID是Oracle中一个特殊的数据类型,它代表了表中每一条记录在物理存储上的唯一地址。利用ROWID可以非常高效地查询和...

    轻松消除SQL SERVER重复记录

    标题提到的"轻松消除SQL SERVER重复记录"是指在SQL Server环境中高效、便捷地去除数据库表中的重复行。描述中提到的问题是开发人员在查询和统计时可能遇到的挑战,即由于重复记录导致的结果不准确。下面我们将详细...

    Oracle中用Rowid查找和删除表中的重复记录

    使用`DISTINCT`关键字可以返回去除重复后的记录,但这种方法只能用于查看数据,无法直接获取重复记录。 3. **Rowid与Subquery** ```sql SELECT * FROM cz a WHERE ROWID = (SELECT MAX(ROWID) FROM cz WHERE c1 ...

    利用Excel高级筛选选择不重复的记录.rar

    在Excel中,高效地管理数据并去除重复项是数据分析中不可或缺的一部分。本教程重点讲解如何利用Excel的高级筛选功能来选择不重复的记录,从而帮助用户优化数据集,提高工作效率。 首先,我们要理解什么是高级筛选。...

    如何删除表中重复数据

    这种方法不需要创建临时表,而是直接通过子查询的方式删除重复记录。 1. **确定唯一标识字段**: 首先需要确定哪些字段组合起来可以作为一条记录的唯一标识,比如主键或一组具有唯一性的字段。 2. **删除重复记录...

    ExcelVBA实例教程037:使用高级筛选获得不重复记录.pdf

    运行`Filter`子过程后,Excel会自动去除工作表`Sheet1`当前区域内的重复记录,并将这些唯一值复制到工作表`Sheet2`的相应位置,如图2所示。 在实际应用中,可以根据需求调整`AdvancedFilter`的参数,例如添加条件...

    删除表中重复数据sql语句

    以上SQL语句能够帮助我们删除除了具有最小ROWID之外的所有重复记录。 3. **查找表中多余的重复记录(不含最小ROWID)** ```sql SELECT * FROM vita_ea WHERE (a.peopleId, a.seq) IN ( SELECT peopleId, seq ...

    用Distinct在MySQL中查询多条不重复记录值,绝对的物有所值

    这是`DISTINCT`最基本的用法,适用于快速去除重复记录,得到唯一数据。 然而,当我们需要同时返回`id`和`name`时,事情变得稍微复杂。如果直接使用: ```sql SELECT DISTINCT name, id FROM table; ``` 你可能会...

    删重复记录

    在Oracle数据库管理中,删除重复记录是一项常见的任务。重复数据不仅会导致存储空间的浪费,还可能引起数据不一致的问题,因此有效地处理重复记录是保证数据质量和性能的关键环节之一。以下将详细阐述如何根据给定的...

Global site tag (gtag.js) - Google Analytics