>  기사  >  데이터 베이스  >  快速删除ORACLE重复记录

快速删除ORACLE重复记录

WBOY
WBOY원래의
2016-06-07 17:53:36810검색

在Oracle中,可以通过唯一rowid实现删除重复记录;还可以建临时表来实现...这个只提到其中的几种简单实用的方法,希望可以和大家分享(以表employee为例)。 SQL desc employee Name Null? Type emp_id NUMBER(10) emp_name VARCHAR2(20) salary NUMBER(10,2

在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; (再将临时表里的内容插回来)

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.