如何删除表中重复的wid
select yhbh,count(wid) from ZC_YH group by yhbh having count(wid)>1;
delete from zc_yh where wid in(select min(wid) from ZC_YH group by yhbh having count(wid)>1);
select yhbh from ZC_YH
方法二:2、rowid
我们在处理一张表中重复记录时经常用到他,当然你也可以用一个很原始的方法,就是将有重复记录的表中的数据导到另外一张表中,最后再倒回去。
SQL>create table stu_tmp as select distinct* from stu;
SQL>truncate table sut; //清空表记录
SQL>insert into stu select * from stu_tmp; //将临时表中的数据添加回原表但是要是stu的表数据是百万级或是更大的千万级的,那这样的方法显然是不明智的,因此我们可以根据rowid来处理,rowid具有唯一性,查询时效率是很高的,
例如,学生表中的姓名会有重复的情况,但是学生的学号是不会重复的,如果我们要删除学生表中姓名重复只留学号最大的学生的记录,怎么办呢?
delete from stu a
where rowid not in (select max(rowid)
from stu b
where a.name = b.name
and a.stno < b.stno);
这样就可以了。
方法三:
2. ROWID的使用——快速删除重复的记录
ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。
ROWID可以分为物理rowid和逻辑rowid两种。普通的表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid。
当表中有大量重复数据时,可以使用ROWID快速删除重复的记录。
举例:
--建表tbl
SQL> create table stu(no number,name varchar2(10),sex char(2));
--添加测试记录
SQL> insert into stu values(1, 'ab',’男’);
SQL> insert into stu values(1, 'bb',’女’);
SQL> insert into stu values(1, 'ab',’男’);
SQL> insert into stu values(1, 'ab',’男’);
SQL>commit;
删除重复记录方法很多,列出两种。
⑴ 通过创建临时表
可以把数据先导入到一个临时表中,然后删除原表的数据,再把数据导回原表,SQL语句如下:
SQL>create table stu_tmp as select distinct* from stu;
SQL>truncate table sut; //清空表记录
SQL>insert into stu select * from stu_tmp; //将临时表中的数据添加回原表
这种方法可以实现需求,但是很明显,对于一个千万级记录的表,这种方法很慢,在生产系统中,这会给系统带来很大的开销,不可行。
⑵ 利用rowid结合max或min函数
使用rowid快速唯一确定重复行结合max或min函数来实现删除重复行。
SQL>delete from stu a where rowid not in (select max(b.rowid) from stu b where a.no=b.no and a.name = b.name and a.sex = b.sex); //这里max使用min也可以
或者用下面的语句
SQL>delete from stu a where rowid < (select max(b.rowid) from stu b where a.no=b.no and a.name = b.name and a.sex = b.sex); //这里如果把max换成min的话,前面的where子句中需要把"<"改为">"
跟上面的方法思路基本是一样的,不过使用了group by,减少了显性的比较条件,提高效率。
SQL>delete from stu where rowid not in (select max(rowid) from stu t group by t.no, t.name, t.sex );
思考:若在stu表中唯一确定任意一行数据(1, 'ab',’男’),把sex字段更新为”女”,怎么做?
SQL>update stu set sex=’女’ where rowid=(select min(rowid) from stu where no=1 and name=’ab’ and sex=’男’);
如何删除表中重复的wid相关推荐
- 查询和删除表中重复数据sql语句
查询和删除表中重复数据sql语句 (一) 1.查询表中重复数据.select * from people where peopleId in (select peopleId from pe ...
- sql server如何删除表中重复数据
当我们需要删除表中重复的数据的时候,该如何操作呢? 具体操作分为四个步骤: 1.将查询到的无重复数据存入临时表中 2.删除原表的内容 3.将临时表插入到原表中 4.删除临时表 理解起来是比较简单的,这 ...
- MySql删除表中重复数据
有一表中存在大量重复数据 在此记录下我删除表内重复数据的方法 -- 新增测试表 create table basic_farmer ( id INT(11), user_name VARCHAR(25 ...
- sql删除表中重复记录_SQL从SQL表中删除重复行的不同方法
sql删除表中重复记录 This article explains the process of performing SQL delete activity for duplicate rows f ...
- SQLServer删除表中重复记录
sqlserver删除表中的重复数据 SqlServer删除表中重复记录 转载链接:https://www.bbsmax.com/A/1O5Ee12G57/ SqlServer删除表中重复记录 重复记 ...
- oracle 删除表中重复记录,并保留一条
1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having cou ...
- mysql重复数据只取一条数据_My sql 中删除表中重复记录?只保留一条
匿名用户 1级 2018-08-20 回答 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 sel ...
- Oracle如何删除表中重复记录
1 引言 在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来读诸多不便,那么怎么删除这些重复没有用的数据呢? 平时工作中可能会遇到当试图对库表中的 ...
- 利用SQL05特性删除表中重复数据
问题:一个表有自增的ID列,表中有一些记录内容重复,也就是说这些记录除了ID不同之外,其他的信息都相同.需要把重复的记录保留一条,剩下的删除. 这种需求一般开发人员都会,我这里写出两个版本. 版本一: ...
最新文章
- 使用Protobuf文件一键生成Java类
- watchOS 5 新特性:继续发力运动与健身
- elasticsearch 根据条件更新数据
- cnn池化层输入通道数_(pytorch-深度学习系列)CNN中的池化层-学习笔记
- 零中频接收机频率转换图_接收机抗噪声技术
- MSON,让JSON序列化更快
- 头条终面:写个消息中间件
- 买g 怀旧 被封号_防火防盗防封号 《魔兽世界》怀旧服自救指南
- 为什么我十分喜欢C,却很不喜欢C++
- 计算机组成与结构学的是什么内容,计算机组成与体系结构教学大纲.doc
- java 经纬度的距离计算工具包
- 网络扫描 : nbtscan
- 2013年13寸Macbook Air 安装单windows 10系统
- 苹果手机测试版软件app,APP苹果测试版UDID设置
- 正则表达式在线测试工具
- mac创建快捷新建文本方式
- [日常训练] 藏宝路径
- MATLAB 如何让图形变美?[第一期]
- Arduino用遥控器控制LED灯开关和亮度
- 绕过tp路由器管理密码_TP路由器怎么重启 TP-Link无线路由器重启方法【详细介绍】...
热门文章
- 【杂文】CM 倒下了,但还有这些第三方安卓 ROM 让你刷个痛快
- opencv之图像采样
- Html 中的块级元素和行内元素(内联元素)
- 工程管理系统企业工程管理系统源码简介
- 交换机 (switch)、路由器 (router) 和集线器 (hub) 的区别
- 【遇见OFFER】CSDN线上云招聘,你会成我们的下一个同事吗?
- mysql 1260,MYSQL 源码阅读 六
- 【JS篇】通过点击或其他操作进行复制(链接,文字等)
- Android小米手机必须插入sim卡才可以usb调试解决方案
- 操作系统之进程管理(上),研究再多高并发,都不如啃一下操作系统进程!!!...