网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.带你走进Oracle数据安全的世界一.
.在Oracle9i中,如何监视索引并清除.
.Oracle 连接常见错误及解决方法.
.Ruby on Rails 连接 Oracle 数据.
.充分利用 Oracle SQL Developer .
.ORACLE性能诊断―学习statspack笔.
.经典的问题与解答(2).
.OARCLE数据库归档模式的设置.
.自动转换Foxpro/Oracle台站数据库.
.用网络卡从并口上启动Linux.
.oracle的文本导入、导出技巧.
.簡析REDO LOGFILE.
.不安装ORACLE客户端的系统移植方.
.Linux Kernel核心中文手册(1).
.详细介绍:安装0racle 10g 的艰难.
.Oracle数据库经典优化之索引原理.
.如何在高级的复制中切换主体定义.
.Developer 6i Web发布配置范例(下.
.如何解决JOB的Interval输入参数过.
.Oracle数据库技术(35).

快速删除ORACLE重复记录

发表日期:2008-2-9



  在Oracle中,可以通过唯一rowid实现删除重复记录;还可以建临时表来实现...这个只提到其中的几种简单实用的方法,希望可以和大家分享(以表employee为例)。

  SQL> desc employee

  Name Null? Type

  emp_id NUMBER(10)
  emp_name VARCHAR2(20)

  salary NUMBER(10,2)


  可以通过下面的语句查询重复的记录:
  SQL> select * from employee;

  EMP_ID EMP_NAME SALARY

  1 sunshine 10000

  1 sunshine 10000

  2 semon 20000

  2 semon 20000

  3 xyz 30000

  2 semon 20000

  SQL> select distinct * from employee;

  EMP_ID EMP_NAME SALARY

  1 sunshine 10000

  2 semon 20000

  3 xyz 30000

  SQL> select * from employee group by emp_id,emp_name,salary having count (*)>1

  EMP_ID EMP_NAME SALARY

  1 sunshine 10000

  2 semon 20000

  SQL> select * from employee e1 

  where rowid in (select max(rowid) from employe e2 
  where e1.emp_id=e2.emp_id and 

  e1.emp_name=e2.emp_name and e1.salary=e2.salary);


  EMP_ID EMP_NAME SALARY

  1 sunshine 10000

  3 xyz 30000

  2 semon 20000 


  2. 删除的几种方法:

  (1)通过建立临时表来实现

  SQL>create table temp_emp as (select distinct * from employee) 

  SQL> truncate table employee; (清空employee表的数据)

  SQL> insert into employee select * from temp_emp; (再将临时表里的内容插回来)


  ( 2)通过唯一rowid实现删除重复记录.在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大或最小rowid的就可以了,其余全部删除。

  SQL>delete from employee e2 where rowid not in (
  select max(e1.rowid) from employee e1 where 

  e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);--这里用min(rowid)也可以。

  SQL>delete from employee e2 where rowid <(
  select max(e1.rowid) from employee e1 where 
  e1.emp_id=e2.emp_id and e1.emp_name=e2.emp_name and e1.salary=e2.salary);

  (3)也是通过rowid,但效率更高。


  SQL>delete from employee where rowid not in (
  select max(t1.rowid) from employee t1 group by t1.emp_id,t1.emp_name,t1.salary);--这里用min(rowid)也可以。


  EMP_ID EMP_NAME SALARY

  1 sunshine 10000

  3 xyz 30000

  2 semon 20000 
上一篇:Oracle密码文件的创建、使用和维护 人气:583
下一篇:Oarcle学习笔记之 人气:557
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐