在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数据库表中的重复记录,有几种方法可以采用: ##### 方法一:使用子查询与DELETE语句 这种方法适用于只需要删除重复记录中的某些行的情况。步骤如下: 1. **找出重复的记录**:首先,我们需要找到...
本文旨在通过对比几种不同的方法来删除Oracle中的重复记录,并分析其性能差异,从而为数据库管理员提供有效的解决方案。 #### 二、方法与实现 ##### 方法一:使用ROWID直接删除 这种方法利用ROWID属性唯一性来...
因此,掌握如何有效地删除Oracle数据库表中的重复记录是一项非常重要的技能。本文将详细介绍三种常用的删除Oracle数据库表中重复记录的方法。 #### 方法一:使用子查询和ROWID 这种方法适用于仅需删除重复记录中的...
本文将详细介绍如何在Oracle数据库中有效地删除表内的重复记录。 ### 一、理解重复记录 在数据库中,重复记录是指具有相同字段值的一组记录。例如,在一个员工表中,如果有多个记录拥有相同的姓名、职位等信息,则...
本文将详细介绍几种常用的查询和删除Oracle数据库中重复记录的方法。 #### 一、查询重复数据 1. **使用ROWID** ROWID是Oracle提供的一种特殊数据类型,它表示表中行的物理地址。通过ROWID可以快速定位到表中的某...
本文将详细探讨如何在Oracle中查询和删除重复记录,主要聚焦于单个字段和多个字段的情况。 1. **单个字段重复记录查询** 当我们需要根据单个字段(如`peopleId`)查找重复记录时,可以使用以下SQL语句: ```sql ...
### PL/SQL删除Oracle数据库中的重复记录方法详解 在日常的数据库管理与维护工作中,我们经常会遇到需要处理数据表中的重复记录的情况。特别是在大型企业级应用中,由于各种原因(如数据导入错误、系统故障等),...
本文将详细介绍如何在不同的数据库系统(如MySQL、SQL Server、Oracle等)中删除重复记录。 #### SQL删除重复记录的基本思路 删除重复记录的核心思想是先识别出哪些记录是重复的,然后通过某种方式将这些重复记录...
删除Oracle数据库中的重复记录是数据清洗和维护过程中的重要一环。不同的方法适用于不同的场景和数据量大小。创建临时表的方法适合数据量较小的情况,而使用ROWID、MAX/MIN函数或GROUP BY和HAVING子句则更适合处理大...
接下来,我们可以使用 DELETE 语句来删除这些重复记录,但保留 rowid 最小的记录: ```sql delete from R_RESOURCE_DETAILS where (FIELD_CODE) in (select FIELD_CODE from R_RESOURCE_DETAILS group by FIELD_...
以上几种方法都可以有效地帮助我们查找和删除Oracle数据库中的重复记录。选择哪种方法取决于具体的业务需求和数据规模。ROWID方法适合于快速定位记录;GROUP BY方法可用于统计重复记录的数量;而DISTINCT方法适用于...
删除重复记录的方法原理:在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会...
查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)2、删除表中多余的重复记录,...
使用Oracle查询并删除重复记录的SQL语句 在实际应用中,删除重复记录是非常常见的操作,特别是在数据导入、数据整合和数据清洁等场景中。Oracle数据库提供了多种方式来查询和删除重复记录,本文将详细介绍这些方法...
Oracle 快速删除重复记录 在 Oracle 数据库中,删除重复记录是一项常见的操作,尤其是在大型数据表中。删除重复记录可以提高数据的准确性和一致性。本文总结了四种删除重复记录的方法,每种方法都有其优缺点。 ...
删除重复记录时,通常保留一个代表性的记录,例如保留 `ROWID` 最小的记录。可以使用以下 SQL 语句: ```sql DELETE from 表 WHERE (id) IN ( SELECT id FROM 表 GROUP BY id HAVING COUNT(id) > 1) AND ...
本文将详细解析如何在Oracle中删除表中的重复数据,同时确保不损害和修改原表的其他数据。 ### Oracle删除表中的重复数据方法 在Oracle中删除表中的重复数据,可以采用多种策略,但通常涉及创建一个临时表来保存...
### 如何高效删除Oracle数据库中的重复数据 在Oracle数据库管理中,经常会出现因各种原因导致的数据重复问题。这些重复数据不仅占用存储空间、降低查询效率,还可能导致数据分析时出现错误的结果。因此,学会如何...