下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Oracle 删除表中重复数据我们可能会出现这种情况,某个表原来设计不周全,导致表里面的数据数据 重复,那么,如何对重复的数据进行删除呢?重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。一、对于部分字段重复数据的删除先来谈谈如何查询重复的数据吧。下面语句可以查询出那些数据是重复的:select 字段1,字段2,count(*) from 表名 group by 字段 1,字段 2 havingcount(*) 1将上面的 号改为 =号就可以查询出没有重复的数据了。想要删除这些重复的数据,可以使用下面语句进行删除delete from 表名 a where
2、字段 1,字段 2 in(select 字段 1,字段 2,count(*) from 表名 group by 字段 1,字段 2 having count(*) 1)上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:CREATE TABLE 临时表 AS(select 字段1,字段2,count(*) from 表名 group by 字段 1,字段 2 havingcount(*) 1)上面这句话就是建立了临时
3、表,并将查询到的数据插入其中。下面就可以进行这样的删除操作了:delete from 表名 a where 字段1,字段2 in (select 字段 1, 字段 2 from 临时表 );这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。在 oracle 中,有个隐藏了自动 rowid ,里面给每条记录一个唯一的rowid , *8tHV*T&管业专Ax我们如果想保留最新的一条记录,jmK10u=教我们就
4、可以利用这个字段,保留重复数据中 rowid 最大的一条记录就可以 了。下面是查询重复数据的一个例子:select a.rowid,a.* from 表名 awhere a.rowid !=(select max(b.rowid) from 表名 bwhere a. 字段 1 = b. 字段 1 anda.字段2 = b.字段2)下面我就来讲解一下,1(T0JI=3 网 aC 上面括号中的语句是查询出重复数据中 rowid 最大的一条记录。而外面就是查询出除了rowid 最大之外的其他重复的数据了。由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:delete from 表名 a
5、where a.rowid !=(select max(b.rowid) from 表名 bwhere a. 字段 1 = b. 字段 1 anda.字段2 = b.字段2)随便说一下,上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、 rowid 插入临时表中,然后删除的时候在进行比较。create table 临时表 asselect a.字段 1,a.字段 2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;delete from 表名 awhere a.rowid !=(select b.dataid from
6、 临时表 bwhere a.字段 1 = b.字段 1 anda.字段2 = b.字段2);commit;Delete from 表 awhere a.rowid not in(select distinct临时表b.dataid一新增临时表给rowid取的列名from 临 时表b,testwhere 临时表 b.id = 表 a.id and 临时表 = )二、对于完全重复记录的删除对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复 数据后的记录:select distinct * from 表名可以将查询的记录放到临时表中,然后再将原来的表记录删除
7、,最后将临时 表的数据导回原来的表中。如下:CREATE TABLE 临时表 AS (select distinct * from 表名);drop table 正式表;insert into 正式表 (select * from 临时表);drop table 临时表;如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据 后的数据导入到临时表,然后在从临时表将数据导入正式表中,如下:INSERT INTO t_table_bakselect distinct * from t_table;删除重复数据总的分2种:a。删除完全重复列的数据;bo删除不完全重复列的数据。1。删除完全重复
8、列的数据;这相对简单,创建一张新表(create table as (select distinct * from 原表), 删除原来的表(Drop table原表),把新表名字重命名。2。删除不完全重复列的数据;这又分为重复记录保留1条,或不保留。案例新建表test。create table test(id number,name varchar2(20);select * from test;test表列重复的数据全部删除新建临时表test2create table test2 as(select name,id,count(*) shuliang from test group by n
9、ame,id having count(*)1);-shuliang为count(*)的定义的列名。select * from test2;NAME ID J SHULIANG 1A删除所有重复数据delete from test where (id,name) in(select id,name from test2 )test表列重复的数据删除仅保留一条新建临时表test3create table test3 as(select id ,name,max(rouwid) dataid from test group by id,name );select * from test3;| ID .NAMEDATAIDZT- AAAMThAAEAAAAFmAAG 2_ 2 a AAAMThAAEAAAAFmAAB 工 3 : b- AMMTlWXEAWFrnAAC司 在 jAAAMThAAEAAAAFmAAE删除test表重复数据,重复数据保留一条delete from test where test.rowid not in(select distin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混合动力电动汽车结构原理与检修 第2版 课件 学习情景5 混合动力电动汽车辅助系统检修
- 空调维保施工管理制度(3篇)
- 资产清查管理制度内部缺陷(3篇)
- 《GA 659.5-2006互联网公共上网服务场所信息安全管理系统 数据交换格式 第5部分:上网服务场所服务状态基本数据交换格式》专题研究报告
- NF - B作为薄型子宫内膜炎症生物标志物对反复种植失败活产的预测价值
- 纳税人学堂现场培训课件
- 兼职培训师课件展示模板
- 养老院入住老人健康监测制度
- 2026湖南岳阳市屈原管理区机关事务服务中心编外人员招聘3人参考题库附答案
- 2026福建南平市旭辉实验学校招聘教师2人考试备考题库附答案
- 2026年1月福建厦门市集美区后溪镇卫生院补充编外人员招聘16人笔试备考试题及答案解析
- 2026年乡村治理体系现代化试题含答案
- 通风设备采购与安装合同范本
- 2026年济南工程职业技术学院单招综合素质考试参考题库带答案解析
- 甘肃省酒泉市普通高中2025~2026学年度第一学期期末考试物理(含答案)
- 2026元旦主题班会:马年猜猜乐新春祝福版 教学课件
- 王洪图黄帝内经80课时讲稿
- GB/T 5023.7-2008额定电压450/750 V及以下聚氯乙烯绝缘电缆第7部分:二芯或多芯屏蔽和非屏蔽软电缆
- GB/T 17984-2000麻花钻技术条件
- GB 15196-2015食品安全国家标准食用油脂制品
- 瑜伽师地论(完美排版全一百卷)
评论
0/150
提交评论