`
andy54321
  • 浏览: 441521 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

快速删除ORACLE重复记录

阅读更多
在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
分享到:
评论
1 楼 shjavaer 2008-08-19  
多谢LZ热心

相关推荐

    oracle中如何删除重复的记录

    要删除Oracle数据库表中的重复记录,有几种方法可以采用: ##### 方法一:使用子查询与DELETE语句 这种方法适用于只需要删除重复记录中的某些行的情况。步骤如下: 1. **找出重复的记录**:首先,我们需要找到...

    oracle删除重复记录性能分析

    本文旨在通过对比几种不同的方法来删除Oracle中的重复记录,并分析其性能差异,从而为数据库管理员提供有效的解决方案。 #### 二、方法与实现 ##### 方法一:使用ROWID直接删除 这种方法利用ROWID属性唯一性来...

    Oracle数据库删除表中重复记录的方法三则.txt

    因此,掌握如何有效地删除Oracle数据库表中的重复记录是一项非常重要的技能。本文将详细介绍三种常用的删除Oracle数据库表中重复记录的方法。 #### 方法一:使用子查询和ROWID 这种方法适用于仅需删除重复记录中的...

    oracle删除重复记录

    本文将详细介绍如何在Oracle数据库中有效地删除表内的重复记录。 ### 一、理解重复记录 在数据库中,重复记录是指具有相同字段值的一组记录。例如,在一个员工表中,如果有多个记录拥有相同的姓名、职位等信息,则...

    Oracle查询重复数据与删除重复记录方法(txt)

    本文将详细介绍几种常用的查询和删除Oracle数据库中重复记录的方法。 #### 一、查询重复数据 1. **使用ROWID** ROWID是Oracle提供的一种特殊数据类型,它表示表中行的物理地址。通过ROWID可以快速定位到表中的某...

    ORACLE重复记录查询.docxORACLE

    本文将详细探讨如何在Oracle中查询和删除重复记录,主要聚焦于单个字段和多个字段的情况。 1. **单个字段重复记录查询** 当我们需要根据单个字段(如`peopleId`)查找重复记录时,可以使用以下SQL语句: ```sql ...

    plsql删除重复记录

    ### PL/SQL删除Oracle数据库中的重复记录方法详解 在日常的数据库管理与维护工作中,我们经常会遇到需要处理数据表中的重复记录的情况。特别是在大型企业级应用中,由于各种原因(如数据导入错误、系统故障等),...

    删除数据表中重复记录

    本文将详细介绍如何在不同的数据库系统(如MySQL、SQL Server、Oracle等)中删除重复记录。 #### SQL删除重复记录的基本思路 删除重复记录的核心思想是先识别出哪些记录是重复的,然后通过某种方式将这些重复记录...

    wxh Oracle数据库删除重复记录的方法

    删除Oracle数据库中的重复记录是数据清洗和维护过程中的重要一环。不同的方法适用于不同的场景和数据量大小。创建临时表的方法适合数据量较小的情况,而使用ROWID、MAX/MIN函数或GROUP BY和HAVING子句则更适合处理大...

    Oracle查询重复数据并删除,只保留一条记录.docx

    接下来,我们可以使用 DELETE 语句来删除这些重复记录,但保留 rowid 最小的记录: ```sql delete from R_RESOURCE_DETAILS where (FIELD_CODE) in (select FIELD_CODE from R_RESOURCE_DETAILS group by FIELD_...

    Oracle查询重复数据与删除重复记录方法

    以上几种方法都可以有效地帮助我们查找和删除Oracle数据库中的重复记录。选择哪种方法取决于具体的业务需求和数据规模。ROWID方法适合于快速定位记录;GROUP BY方法可用于统计重复记录的数量;而DISTINCT方法适用于...

    Oracle中查找和删除重复记录方法

    删除重复记录的方法原理:在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会...

    解决Oracle删除重复数据只留一条的方法详解

    查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) &gt; 1)2、删除表中多余的重复记录,...

    使用Oracle查询并删除重复记录的SQL语句

    使用Oracle查询并删除重复记录的SQL语句 在实际应用中,删除重复记录是非常常见的操作,特别是在数据导入、数据整合和数据清洁等场景中。Oracle数据库提供了多种方式来查询和删除重复记录,本文将详细介绍这些方法...

    oracle快速删除重复的记录

    Oracle 快速删除重复记录 在 Oracle 数据库中,删除重复记录是一项常见的操作,尤其是在大型数据表中。删除重复记录可以提高数据的准确性和一致性。本文总结了四种删除重复记录的方法,每种方法都有其优缺点。 ...

    查询及删除重复记录的SQL语句.

    删除重复记录时,通常保留一个代表性的记录,例如保留 `ROWID` 最小的记录。可以使用以下 SQL 语句: ```sql DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) &gt; 1) AND ...

    Oracle删除表中的重复数据

    本文将详细解析如何在Oracle中删除表中的重复数据,同时确保不损害和修改原表的其他数据。 ### Oracle删除表中的重复数据方法 在Oracle中删除表中的重复数据,可以采用多种策略,但通常涉及创建一个临时表来保存...

    如何高效删除Oracle数据库中的重复数据

    ### 如何高效删除Oracle数据库中的重复数据 在Oracle数据库管理中,经常会出现因各种原因导致的数据重复问题。这些重复数据不仅占用存储空间、降低查询效率,还可能导致数据分析时出现错误的结果。因此,学会如何...

Global site tag (gtag.js) - Google Analytics