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相关推荐

  1. 查询和删除表中重复数据sql语句

    查询和删除表中重复数据sql语句 (一) 1.查询表中重复数据.select * from people where peopleId in (select   peopleId  from   pe ...

  2. sql server如何删除表中重复数据

    当我们需要删除表中重复的数据的时候,该如何操作呢? 具体操作分为四个步骤: 1.将查询到的无重复数据存入临时表中 2.删除原表的内容 3.将临时表插入到原表中 4.删除临时表 理解起来是比较简单的,这 ...

  3. MySql删除表中重复数据

    有一表中存在大量重复数据 在此记录下我删除表内重复数据的方法 -- 新增测试表 create table basic_farmer ( id INT(11), user_name VARCHAR(25 ...

  4. sql删除表中重复记录_SQL从SQL表中删除重复行的不同方法

    sql删除表中重复记录 This article explains the process of performing SQL delete activity for duplicate rows f ...

  5. SQLServer删除表中重复记录

    sqlserver删除表中的重复数据 SqlServer删除表中重复记录 转载链接:https://www.bbsmax.com/A/1O5Ee12G57/ SqlServer删除表中重复记录 重复记 ...

  6. oracle 删除表中重复记录,并保留一条

    1.查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断 select * from 表 where Id in (select Id from 表 group byId having cou ...

  7. mysql重复数据只取一条数据_My sql 中删除表中重复记录?只保留一条

    匿名用户 1级 2018-08-20 回答 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 sel ...

  8. Oracle如何删除表中重复记录

    1  引言 在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来读诸多不便,那么怎么删除这些重复没有用的数据呢? 平时工作中可能会遇到当试图对库表中的 ...

  9. 利用SQL05特性删除表中重复数据

    问题:一个表有自增的ID列,表中有一些记录内容重复,也就是说这些记录除了ID不同之外,其他的信息都相同.需要把重复的记录保留一条,剩下的删除. 这种需求一般开发人员都会,我这里写出两个版本. 版本一: ...

最新文章

  1. 使用Protobuf文件一键生成Java类
  2. watchOS 5 新特性:继续发力运动与健身
  3. elasticsearch 根据条件更新数据
  4. cnn池化层输入通道数_(pytorch-深度学习系列)CNN中的池化层-学习笔记
  5. 零中频接收机频率转换图_接收机抗噪声技术
  6. MSON,让JSON序列化更快
  7. 头条终面:写个消息中间件
  8. 买g 怀旧 被封号_防火防盗防封号 《魔兽世界》怀旧服自救指南
  9. 为什么我十分喜欢C,却很不喜欢C++
  10. 计算机组成与结构学的是什么内容,计算机组成与体系结构教学大纲.doc
  11. java 经纬度的距离计算工具包
  12. 网络扫描 : nbtscan
  13. 2013年13寸Macbook Air 安装单windows 10系统
  14. 苹果手机测试版软件app,APP苹果测试版UDID设置
  15. 正则表达式在线测试工具
  16. mac创建快捷新建文本方式
  17. [日常训练] 藏宝路径
  18. MATLAB 如何让图形变美?[第一期]
  19. Arduino用遥控器控制LED灯开关和亮度
  20. 绕过tp路由器管理密码_TP路由器怎么重启 TP-Link无线路由器重启方法【详细介绍】...

热门文章

  1. 【杂文】CM 倒下了,但还有这些第三方安卓 ROM 让你刷个痛快
  2. opencv之图像采样
  3. Html 中的块级元素和行内元素(内联元素)
  4. 工程管理系统企业工程管理系统源码简介
  5. 交换机 (switch)、路由器 (router) 和集线器 (hub) 的区别
  6. 【遇见OFFER】CSDN线上云招聘,你会成我们的下一个同事吗?
  7. mysql 1260,MYSQL 源码阅读 六
  8. 【JS篇】通过点击或其他操作进行复制(链接,文字等)
  9. Android小米手机必须插入sim卡才可以usb调试解决方案
  10. 操作系统之进程管理(上),研究再多高并发,都不如啃一下操作系统进程!!!...