大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> 数据库 -> oracle-快速删除重复的记录

oracle-快速删除重复的记录

时间: 2021-07-31 作者:daque

做项手段功夫,一位共事导数据的功夫,不提防把一个表中的数据全都搞重了,也即是说,这个内外一切的记载都有一条反复的。这个表的数据是万万级的,并且是消费体例。也即是说,不许把一切的记载都简略,并且必需赶快的把反复记载删掉。 对此,归纳了一下简略反复记载的本领,以及每种本领的优缺陷。 为了申诉简单,假如表名为tbl,表中有三列col1,col2,col3,个中col1,col2是主键,而且,col1,col2上加了索引。 1、经过创造偶尔表 不妨把数据开始入到一个偶尔表中,而后简略原表的数据,再把数据导回原表,sql语句如次: creat table tbl_tmp (select distinct* from tbl);truncate table tbl;//清空表记载insert into tbl select * from tbl_tmp;//将偶尔表中的数据插回顾。 这种本领不妨实行需要,然而很鲜明,对于一个万万级记载的表,这种本领很慢,在消费体例中,这会给体例带来很大的开支,不行行。 2、运用rowid 在oracle中,每一条记载都有一个rowid,rowid在所有数据库中是独一的,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、运用max或min因变量 这边也要运用rowid,与上头各别的是贯串max或min因变量来实行。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) 再有一种本领,对于表中有反复记载的记载比拟少的,而且有索引的情景,比拟实用。假设col1,col2上有索引,而且tbl表中有反复记载的记载比拟少,sql语句如次4、运用group by,普及功效

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.