oracle删除重复数据并至少保留一条(大数据操作) | 您所在的位置:网站首页 › oracle去除重复数据中的一条数据 › oracle删除重复数据并至少保留一条(大数据操作) |
1. 前言
有时候会遇到这样的问题,一个表中有重复数据,并且数据量比较大,在一万条以上。这个时候如果用delete删除重复数据并保留一条的时候会非常之慢,数据库直接卡死。 这个时候可以通过创建临时表来进行重复数据的筛选,然后删除原来的数据,把临时的表数据再移到数据库的表中。自己测试这种方法十几万的数据量不到1分钟就可以完成。 2. 开始 2.1 创建临时表伪语法: CREATE TABLE TEMP_DELETE_ORDER_INFO AS ( 查找重复的数据并只显示一条 union all 查找不重复的数据 ) SQL 案例: CREATE TABLE TEMP_DELETE_ORDER_INFO AS ( --id重复的数据 select T1.* from ORDER_INFO T1 where T1.id in (select id from ORDER_INFO group by id having count(id) >1) AND T1.ROWID NOT IN (SELECT MIN(ROWID) FROM ORDER_INFO GROUP BY id HAVING COUNT(*) > 1) --将数据连起来 union all --id不重复的数据 select T2.* from ORDER_INFO T2 where T2.id in (select id from ORDER_INFO group by id having count(id) =1) ); 2.2 清空原来的表 truncate TABLE ORDER_INFO; 2.3 将临时表的数据导入到原来的表中insert into ORDER_INFO select * from TEMP_DELETE_ORDER_INFO; 2.4 删除临时表 DROP TABLE TEMP_DELETE_ORDER_INFO; 3. 结尾 创建临时表查找重复数据和不重复数据需要根据自己的需求,我这个是根据id重复来查找的。 |
CopyRight 2018-2019 实验室设备网 版权所有 |