案例:一个应用表中的一个字段是主键,向表中插入数据时,先把数据放在临时表中(没有主键)然后再插入应用表。
这时候如果临时表中有重复数据,无论是主键字段businessid有重复,还是一整行有重复都会报出违反唯一主键约束错误。
方法:group by XX having count(*)>1,rowid,distinct,temporary table,procedure
1、查询表中的重复数据
a.重复一个字段
b.重复多个字段
c.重复一整行
创建测试表:
create table cfa (businessid number,customer varchar2(50),branchcode varchar2(10),data_date varchar2(10)); insert into cfa values (1,'Albert','SCB','2011-11-11'); insert into cfa values (2,'Andy','DB','2011-11-12'); insert into cfa values (3,'Allen','HSBC','2011-11-13'); ---------------以下为重复数据---------------------------------------------- insert into cfa values (1,'Alex','ICBC','2011-11-14'); insert into cfa values (1,'Albert','CTBK','2011-11-15'); insert into cfa values (1,'Albert','SCB','2011-11-11');
对于a的情况,只有businessid重复
select * from cfa where businessid in (select businessid from cfa group by businessid having count(businessid)>1);
如果是b的情况,businessid 和name同时存在重复
select * from cfa where (businessid,customer) in (select businessid,customer from cfa group by businessid,customer having count(*)>1);
对于c的情况,重复一整行
参考b的方法:
select * from cfa where (businessid,customer,branchcode,data_date) in (select * from cfa group by businessid,customer,branchcode,data_date having count(*)>1);
2、删除表中的重复数据
a情况,删除表中多余的重复记录,重复记录是根据单个字段(businessid)来判断,只留有rowid最小的记录
也可以只保留rowid不是最小记录,需要把代码中的min改为max这里不再赘述。
delete from cfa where businessid in (select businessid from cfa group by businessid having count(businessid) > 1) and rowid not in (select min(rowid) from cfa group by businessid having count(businessid) > 1);
或者,使用下面更简单高效的语句
DELETE FROM cfa t WHERE t.ROWID > (SELECT MIN(X.ROWID) FROM cfa X WHERE X.businessid = t.businessid);
b情况,删除表中多余的重复记录(多个字段),只留有rowid最小的记录
delete from cfa where (businessid,customer) in (select businessid,customer from cfa group by businessid,customer having count(*) > 1) and rowid not in (select min(rowid) from cfa group by businessid,customer having count(*) > 1);
或者,使用下面更简单高效的语句
DELETE FROM cfa t WHERE t.ROWID > (SELECT MIN(X.ROWID) FROM cfa X WHERE X.businessid = t.businessid and x.customer = t.customer);
c情况,这种情况就比较简单,使用临时表方法
create table cfabak as select distinct * from cfa; truncate table cfa;--如果是生产最好对该表backup Insert into cfa select * from cfabak; commit;
相关推荐
使用Oracle查询并删除重复记录的SQL语句 在实际应用中,删除重复记录是非常常见的操作,特别是在数据...删除重复记录是非常重要的数据清洁步骤,Oracle数据库提供了多种方式来实现该操作,本文只是其中的一些方法。
删除重复数据是维护数据完整性和准确性的重要步骤。下面介绍几种常见的删除重复数据的方法: #### 1. 删除具有相同 `peopleId` 的重复记录 **示例**: ```sql DELETE FROM people WHERE peopleId IN (SELECT ...
5. 特定字段的过滤:在上述提供的示例中,虽然某些过滤条件已被注释掉,但可以通过在查询中加入特定的过滤条件来限制要查找和删除重复数据的范围,例如只针对特定的车辆编号或分类编号进行操作。 6. 注意数据迁移的...
本文将从多个方面对 oracle 的知识点进行总结,包括查找部门的前 2 名、事务概念、触发器的作用、实现索引的方式、view 的概念、 truncate 和 delete 的区别、数据库启动与关闭的步骤、删除重复记录、授予权限等。...
本文将详细介绍几种在Oracle数据库中快速删除重复记录的方法及其各自的优缺点。 ##### 1. 创建临时表 **方法概述:** 该方法首先创建一个临时表,将原始表中的唯一记录插入临时表中,然后清空原始表,并将临时表...
在Oracle中,这个过程通常涉及更多步骤,比如创建数据库模板、设置初始化参数文件等,而不仅仅是简单的SQL命令。 2. 删除数据库:`DROP DATABASE dbname`用于删除一个数据库,但Oracle并不直接支持这个命令。通常,...
总之,在Oracle数据库中批量添加主键是一个涉及多个步骤的过程,包括查找无主键的表、编写和执行`ALTER TABLE`语句以及处理可能存在的重复数据。这个过程需要谨慎操作,确保数据的完整性和一致性。同时,合理规划和...
首先,让我们来看一下如何在Oracle中查找并删除重复的记录。在Oracle中,每一行记录都有一个唯一标识符,即ROWID,它标识了记录在数据库中的具体位置。当存在重复记录时,虽然数据内容相同,但ROWID会不同。要删除除...
如果发现重复,可以使用TDataSet的Delete方法删除重复记录,或者将它们标记出来供后续处理。 6. **数据校验和清理**:在处理完重复数据后,记得更新到数据库中,可以使用TDataSet的ApplyUpdates方法将更改提交到...
本章节主要介绍了Oracle数据库中常用的命令及其使用方法。 1. **查看参数文件**: `Desc v$parameter` - 这个命令用于查看Oracle的参数文件信息,通过查询`v$parameter`视图可以获取当前实例的所有参数设置。 2....
在Oracle数据库管理中,脚本是执行特定任务的SQL或PL/SQL集合,它们极大地提高了DBA(数据库管理...在实际工作中,结合《oracle去除重复记录的方法.docx》文档中的详细步骤和示例,将有助于进一步理解和应用这些概念。
除了上述主要知识点外,还涉及到了一些额外的Oracle数据库管理技巧,如数据库空间查询、删除重复数据、查询第一条记录以及存储过程/函数的书写规则等。 ##### 数据库空间查询 - 查询表空间的总空间、剩余空间及使用...
- **取不重复的记录行**:通过使用DISTINCT关键字或其他方法,可以有效地去除重复记录。 - **查询具有相同薪水的职工**:通过使用GROUP BY和HAVING子句等,可以找出具有相同薪水的所有职工。 - **统计EBS表数量及...
删除注册表中与Oracle相关的内容,具体如下: 删除HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE目录。 删除HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services中所有以oracle或OraWeb为开头的键。 删除HKEY_...