标签:tb1 数据 临时 rowid oracle c2 c1 tb 百万
1、先创建临时表,把重复数据的分组条件,rowid添加到临时表
create table tb1 as
select tb.c1,tb.c2 ,max(ROWID) dataid FROM tb sc GROUP BY tb.c1,tb.c2
having count(*) > 1;
2、给临时表创建索引
create index t on tb1(c1,c2);
3、执行删除操作
delete from tb where rowid in
(select a.rowid from tb a , tb1 b where a.rowid<>b.dataid and a.c1 = b.c1
and a.c2 = b.c2);
4、删除临时表
drop table tb1
总结:此写法在表数据量很大的情况下,效率也很高。
网上有其他写法,但是效率很低,200多万数据,执行一个小时都没有结果。
标签:tb1,数据,临时,rowid,oracle,c2,c1,tb,百万 来源: https://blog.csdn.net/qq_19983129/article/details/119005050
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。