您的位置:首页 > 数据库 > Oracle

欢迎使用CSDN-markdown编辑器

2017-07-24 11:46 274 查看
一般去重的SQL语句去重是这样写
delete from 表名 a where a.rowid != ( select max(b.rowid) from 表名 b where a.字段1 = b.字段1 and a.字段2 = b.字段2 )
,然而这样的效率很低,最近公司项目因为大量测试产生了大量的垃圾数据,总数据量为10w垃圾数据为1.5w,以这种SQL执行时会直接卡死数据库造成停止响应的后果.所以便结合网络上的资源写了这条语句.

--创建临时表,临时表中保存重复的数据和rowID--
create table 临时表 as
select  b.字段一,b.字段二,b.rowid as dataid from 去重表 b where b.rowid not in (select MAX(a.ROWID) dataid from 去重表 a GROUP BY a.字段一,a.字段二);
--以临时表中rowID为唯一指定删除数据库中的重复数据--
delete from 去重表 a
 where a.rowid in
 (
select b.dataid from 临时表 b
 );
--提交事务--
commit;
--删除临时表,节省服务器资源--
drop table 临时表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息