Oracle数据库中重复数据删除方法:完全去重
2015-06-25 14:25
603 查看
遇到某表sys_param_value数据没有主键,好多数据重复,重复的是整条记录都一样。开始一条一条删除,但是发现太费事,一万多条数据。后来百度下有没有快捷方法,发现还真有。参照冷月宫主的完全去重方法(/article/2952137.html):
自己的具体实现过程:
CREATE TABLE SYS_PARAM_VALUE_COPY AS (SELECT DISTINCT * FROM SYS_PARAM_VALUE);---创建临时表,并把DISTINCT 去重后的数据插入到临时表中。
TRUNCATE TABLE SYS_PARAM_VALUE --清空原表数据
INSERT INTO SYS_PARAM_VALUE(SELECT * FROM SYS_PARAM_VALUE_COPY );--临时表数据插入原表
DROP TABLE SYS_PARAM_VALUE_COPY ;--删除临时表
但是我在TRUNCATE TABLE SYS_PARAM_VALUE --清空原表数据这步清空原表后,给表SYS_PARAM_VALUE 设了主键和唯一性约束键后,
INSERT INTO SYS_PARAM_VALUE(SELECT * FROM SYS_PARAM_VALUE_COPY ;这句执行报违反 唯一性约束。经过一番研究发现,里面还有部分重复,用此句找到重复的记录:select 字段1,字段2,count(*) from 表名 groupby 字段1,字段2 havingcount(*) > 1,找到了重复的记录,还好只有几条。直接在数据库表里删除。若数据量大,可以参照冷月宫主的博客里提供的部分重复的方法。
自己的具体实现过程:
CREATE TABLE SYS_PARAM_VALUE_COPY AS (SELECT DISTINCT * FROM SYS_PARAM_VALUE);---创建临时表,并把DISTINCT 去重后的数据插入到临时表中。
TRUNCATE TABLE SYS_PARAM_VALUE --清空原表数据
INSERT INTO SYS_PARAM_VALUE(SELECT * FROM SYS_PARAM_VALUE_COPY );--临时表数据插入原表
DROP TABLE SYS_PARAM_VALUE_COPY ;--删除临时表
但是我在TRUNCATE TABLE SYS_PARAM_VALUE --清空原表数据这步清空原表后,给表SYS_PARAM_VALUE 设了主键和唯一性约束键后,
INSERT INTO SYS_PARAM_VALUE(SELECT * FROM SYS_PARAM_VALUE_COPY ;这句执行报违反 唯一性约束。经过一番研究发现,里面还有部分重复,用此句找到重复的记录:select 字段1,字段2,count(*) from 表名 groupby 字段1,字段2 havingcount(*) > 1,找到了重复的记录,还好只有几条。直接在数据库表里删除。若数据量大,可以参照冷月宫主的博客里提供的部分重复的方法。
相关文章推荐
- Oracle 11gR2 RAC ohasd failed to start 解决方法
- oracle使用bat脚本批量执行sql文件
- Purpose of the Voting Disk for #Oracle RAC
- Oracle RAC集群资料收集
- Oracle RAC集群资料收集
- Oracle XMLTable Tutorial With Example
- Oracle操作XML各种场景介绍
- Oracle问题
- win7 登录本地oracle报错:ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服
- Oracle study之--“ORA-00845: MEMORY_TARGET not supported on this system"错误
- Oracle 中的Pivoting Insert用法
- hibernate 调用oracle 自带函数
- 自己配置的WAMP环境,扩展oracle函数库(oci)
- Oracle 11gR2 alter操作结果日志的查看
- ORACLE 多表关联 UPDATE 语句
- oracle常用sql语句集合
- oracle sql
- ORACLE TNS Listener远程注册投毒(Poison Attack)漏洞
- Oracle11g使用exp导出空表
- PL/SQL客户端连Oracle很快就断开问题的解决