电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

ORACLE中删除重复记录文本

6页
  • 卖家[上传人]:l****
  • 文档编号:133653386
  • 上传时间:2020-05-29
  • 文档格式:DOC
  • 文档大小:46KB
  • / 6 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、ORACLE中删除重复记录平时工作中可能会遇见当试图对库表中的某一列或几列创建唯一索引时,系统提示 ora-01452 :不能创建唯一索引,发现重复记录。 下面总结一下几种查找和删除重复记录的方法(以表cz为例):表cz的结构如下:sql desc cz name null? type - - - c1 number(10) c10 number(5) c20 varchar2(3)删除重复记录的方法原理: (1).在oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在oracle中的哪一个数据文件、块、行上。(2).在重复的记录中,可能所有列的容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就能了,其余全部删除。重复记录判断的标准是:c1,c10和c20这三列的值都相同才算是重复记录。经查看表cz总共有16条记录:sqlset pagesize 100sqlselect * from cz; c1 c10 c20- - - 1 2 dsf 1 2 dsf 1 2 dsf 1 2 dsf 2 3 c

      2、he 1 2 dsf 1 2 dsf 1 2 dsf 1 2 dsf 2 3 che 2 3 che 2 3 che 2 3 che 3 4 dff 3 4 dff 3 4 dff 4 5 err 5 3 dar 6 1 wee 7 2 zxc20 rows selected.1.查找重复记录的几种方法:(1).sqlselect * from cz group by c1,c10,c20 having count(*) 1; c1 c10 c20- - - 1 2 dsf 2 3 che 3 4 dff(2).sqlselect distinct * from cz; c1 c10 c20- - - 1 2 dsf 2 3 che 3 4 dff(3).sqlselect * from cz a where rowid=(select max(rowid) from cz where c1=a.c1 and c10=a.c10 and c20=a.c20); c1 c10 c20- - - 1 2 dsf 2 3 che 3 4 dff2.删除重复记录的几种方法:(1).适用于有大量

      3、重复记录的情况(在c1,c10和c20列上建有索引的时候,用以下语句效率会非常高):sqldelete cz where (c1,c10,c20) in (select c1,c10,c20 from cz group by c1,c10,c20 having count(*)1) and rowid not in(select min(rowid) from cz group by c1,c10,c20 having count(*)1);sqldelete cz where rowid not in(select min(rowid) from cz group by c1,c10,c20);(2).适用于有少量重复记录的情况(注意,对于有大量重复记录的情况,用以下语句效率会非常低):sqldelete from cz a where a.rowid!=(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);sqldelete from cz a where a.rowiddelet

      4、e from cz a where rowid create table test as select distinct * from cz; (建一个临时表test用来存放重复的记录)sqltruncate table cz; (清空cz表的数据,但保留cz表的结构)sqlinsert into cz select * from test; (再将临时表test里的容反插回来)(4).适用于有大量重复记录的情况(exception into 子句法):采用alter table 命令中的 exception into 子句也能确定出库表中重复的记录。这种方法稍微麻烦一些,为了使用“excepeion into ”子句,必须首先创建 exceptions 表。创建该表的 sql 脚本文件为 utlexcpt.sql 。对于win2000系统和 unix 系统, oracle 存放该文件的位置稍有不同,在win2000系统下,该脚本文件存放在$oracle_homeora90rdbmsadmin 目录下;而对于 unix 系统,该脚本文件存放在$oracle_home/rdbms/adm

      5、in 目录下。具体步骤如下:sql?/rdbms/admin/utlexcpt.sqltable created.sqldesc exceptions name null? type - - - row_id rowid owner varchar2(30) table_name varchar2(30) constraint varchar2(30)sqlalter table cz add constraint cz_unique unique(c1,c10,c20) exceptions into exceptions; *error at line 1:ora-02299: cannot validate (test.cz_unique) - duplicate keys foundsqlcreate table dups as select * from cz where rowid in (select row_id from exceptions); table created.sqlselect * from dups; c1 c10 c20- - - 1 2 dsf 1 2 dsf 1 2 dsf 1 2 dsf 2 3 che 1 2 dsf 1 2 dsf 1 2 dsf 1 2 dsf 2 3 che 2 3 che 2 3 che 2 3 che 3 4 dff 3 4 dff 3 4 dff16 rows selected.sqlselect row_id from exceptions;row_id-aaahd/aaiaaaadsaaaaaahd/aaiaaaadsaabaaahd/aaiaaaadsaacaaahd/aaiaaaadsaafaaahd/aaiaaaadsaahaaahd/aaiaaaadsaaiaaahd/aaiaaaadsaagaaahd/aaiaaaadsaadaaahd/aaiaaaadsaaeaaahd/aaiaaaadsaajaaahd/aaiaaaadsaak

      《ORACLE中删除重复记录文本》由会员l****分享,可在线阅读,更多相关《ORACLE中删除重复记录文本》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2 2022年小学体育教师学期工作总结 2022年家长会心得体会集合15篇
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.