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 临时表); 这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。 这个时候,大家可能会跳出来说,什么?你叫我
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-02

用这种效率最高的就可以

比如,某个表要按照id和name重复,就算重复数据

delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,name);
commit;

如果以id,name和grade重复算作重复数据

delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,name,grade);
commit;

注意:min也可用max替代

第2个回答  2013-12-12
DELETE FROM TABLE WHERE ROWID IN (SELECT max(ROWID) FROM TABLE GROUP BY ID HAVING COUNT(*)>1 )

Oracle 如何查找并删除重复记录
在Oracle数据库中查找并删除重复记录的方法主要包括使用聚合函数配合子查询或连接查询、使用分析函数,以及通过子查询中分析函数实现删除。下面详细介绍这些方法。首先,创建示例表people并生成数据,其中包含一些重复记录。使用聚合函数查找单个字段的重复记录,例如查找email字段的重复数据。可以通过分组统计并返回...

如何解决Oracle数据库中重复数据的方法步骤
先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。上面的语句会把所有重复的全都删除,在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。下面是查询重复数据的一个...

oracle如何删除重复数据oracle如何删除重复数据只保留一条
我们必须首先找到表中的重复记录并删除该记录,才可以创建唯一索引。下面介绍三种不同的方法来确定库表中重复的记录。一、自关联查询方法Oracle系统中,对于所有的表都存在一个唯一的列,这就是rowid。对该列使用最大(max)或者最小(min)函数可以非常容易地确定重复的行。二、GROUPBY\/HAVING查询方法利用分...

SQL:去重的几种常用方法(oracle)
1. **使用distinct进行去重 这是一般SQL中的基本方法,能直接去除重复的行。然而,这种方法仅适用于要去重的字段,并不能显示其他字段。2. **使用group by进行去重 通过分组,我们可以只保留每个组中的唯一记录,这适用于具有多个字段的表。3. **使用窗口函数进行去重 窗口函数的好处是可以标记重复数据...

Oracle数据库重复数据删除的几种方法
重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle数据库重复数据删除技术有如下优势:更大的备份容量、数据能得到持续验证、有更高的数据恢复服务水平、方便实现备份数据的容灾。一、删除部分字段重复数据先来谈谈如何查询重复的数据吧。下面语句可以查询出...

oracle查询出来的数据如何消除重复数据
oracle查询出来的数据消除重复数据的具体步骤如下:1、首先我们查看表中重复的数据。2、然后我饿美女使用distinct去除函数查询出去掉重复后的数据。3、然后我们创建新表把去掉重复的数据插入到新表中。4、最后使用truncate清空原表中的数据。5、再向原表中插入新表中重复的数据,即可达到去重复数据的效果。

Oracle删除重复记录只保留一条数据的几种方法
你好:一种简单方式就是直接根据你不想要的数据进行分组后存储到另外一张表里面 create table as select * from b group id;可以写存储过程来实现判断重复数据后删除。另外一种方法就是插入的时候直接设置主见不让他插入,直接提示不能插入。这个可以参考资料:http:\/\/blog.csdn.net\/haiross\/article...

oracle数据库怎么删除重复数据只留一个?
1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 ;select from 表 where Id in (select Id from 表 group byId having count(Id)> 1)2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录;DELETE from 表 WHERE (id)IN (SELECT id FROM ...

oracle数据库怎么删除重复数据啊
用这种效率最高的就可以 比如,某个表要按照id和name重复,就算重复数据 delete from 表名 where rowid not in (select min(rowid) from 表名 group by id,name);commit;如果以id,name和grade重复算作重复数据 delete from 表名 where rowid not in (select min(rowid) from 表名 group by ...

Oracle删除重复记录只保留一条数据的几种方法
最好不要直接删除,效率比较低。以下语句可以直接删除,字段1,字段2表示需要排重的字段。delete from 表名 a where 字段1,字段2 in (select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)建议直接建一个新表,如果数据量不是太大就直接用distinct生成一份没...

相似回答