Oracle删除重复数据
在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么删除这些重复没有用的数据呢?
重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等。 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle数据库重复数据删除技术有如下优势:更大的备份容量、数据能得到持续验证、有更高的数据恢复服务水平、方便实现备份数据的容灾。
一、删除部分字段重复数据
先来谈谈如何查询重复的数据吧。
下面语句可以查询出那些数据是重复的:
Sql代码
select 字段1,字段2,count(*)
from 表名 group by 字段1,字段2
having count(*) > 1
select 字段1,字段2,count(*)
from 表名 group by 字段1,字段2
having count(*) > 1
将上面的>号改为=号就可以查询出没有重复的数据了。
想要删除这些重复的数据,可以使用下面语句进行删除
Sql代码
delete from 表名 a where 字段1,字段2 in
(select 字段1,字段2,count(*)
from 表名
group by 字段1,字段2
having count(*) > 1)
delete from 表名 a where 字段1,字段2 in
(select 字段1,字段2,count(*)
from 表名
group by 字段1,字段2
having count(*) > 1)
上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:
Sql代码
CREATE TABLE 临时表 AS
(select 字段1,字段2,count(*)
from 表名
group by 字段1,字段2
having count(*) > 1)
CREATE TABLE 临时表 AS
(select 字段
相关文档:
查找数据库中所有字段 以对应的表
select C.column_name,C.TABLE_NAME from dba_tab_columns C where owner=''
查每个科目class 分数scro前三名
select id, name, class, scro
from (select row_number() over(partition by class order by scro desc) cnt,
&n ......
Oracle EBS: EBS常用SQL
最近一直在忙于做EBS的二次开发,离不开拼拼湊湊的SQL语句. 这些都是大家常用的一些SQL,与大家分享,欢迎指正.
/* Formatted on 2009-11-03 23:10:34 (QP5 v5.114.809.3010) */
--1查找系统用户基本信息 author:dezai
Select USER_ID,
&nb ......
修改列属性
alter table tablename modify(name ,varchar2(10)) 列宽度不得小于修改前的宽度
日志管理
视图 v$logfile
alter database add logfile 'd:\orcl01.log' size 10m;//添加组
alter database add logfile member 'd:\orcl02.log' to group 4;//向4组中添加成员
alter database drop logfile member 'd: ......
背景:在windows 2003 server上安装了Oracle 9.2.0.1.0,现打算将其升级到9.2.0.8版本。
1.升级oracle(administrator用户权限)
(1)到metalink下载升级压缩包,patch号为4547809,压缩包名称为 p4547809_92080_WINNT.zip,for windows 32bit。
(2)解压缩zip,下边包含一个Disk1和readme.html文件。 ......