- 浏览: 214970 次
- 性别:
- 来自: 天津
文章分类
最新评论
-
sun.zhang:
这个文章不错,怎么没人顶?
servlet 输出中文显示为问号"??"的解决办法 -
freeskywcy:
happy90 写道Keep-Alive 模式只要设置一下就行 ...
有关http Keep-Alive 的详细解释 -
happy90:
Keep-Alive 模式只要设置一下就行吗? 那编程的时候要 ...
有关http Keep-Alive 的详细解释
Oracle认证:数据库重复数据删除的三种情况,在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来很多的不便,那么怎么删除这些重复没有用的数据呢?
重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证,提高数据恢复服务水平,方便实现数据容灾等。 重复的数据可能有这样两种情况,第一种时表中只有某些字段一样,第二种是两行记录完全一样。Oracle数据库重复数据删除技术有如下优势:更大的备份容量、数据能得到持续验证、有更高的数据恢复服务水平、方便实现备份数据的容灾。
一、删除部分字段重复数据
先来谈谈如何查询重复的数据吧。
下面语句可以查询出那些数据是重复的:
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)
上面的语句非常简单,就是将查询到的数据删除掉。不过这种删除执行的效率非常低,对于大数据量来说,可能会将数据库吊死。所以我建议先将查询到的重复的数据插入到一个临时表中,然后对进行删除,这样,执行删除的时候就不用再进行一次查询了。如下:
CREATE TABLE 临时表 AS
(select 字段1,字段2,count(*) from 表名 group by 字段1,字段2 having count(*) > 1)
上面这句话就是建立了临时表,并将查询到的数据插入其中。
下面就可以进行这样的删除操作了:
delete from 表名 a where 字段1,字段2 in (select 字段1,字段2 from 临时表);
这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。
这个时候,大家可能会跳出来说,什么?你叫我们执行这种语句,那不是把所有重复的全都删除吗?而我们想保留重复数据中最新的一条记录啊!大家不要急,下面我就讲一下如何进行这种操作。
在oracle中,有个隐藏了自动rowid,里面给每条记录一个唯一的rowid,我们如果想保留最新的一条记录,
我们就可以利用这个字段,保留重复数据中rowid最大的一条记录就可以了。
下面是查询重复数据的一个例子:
select a.rowid,a.* from 表名 a
where a.rowid !=
(
select max(b.rowid) from 表名 b
where a.字段1 = b.字段1 and
a.字段2 = b.字段2
)
下面我就来讲解一下,上面括号中的语句是查询出重复数据中rowid最大的一条记录。
而外面就是查询出除了rowid最大之外的其他重复的数据了。
由此,我们要删除重复数据,只保留最新的一条数据,就可以这样写了:
delete from 表名 a
where a.rowid !=
(
select max(b.rowid) from 表名 b
where a.字段1 = b.字段1 and
a.字段2 = b.字段2
)
随便说一下,上面语句的执行效率是很低的,可以考虑建立临时表,讲需要判断重复的字段、rowid插入临时表中,然后删除的时候在进行比较。
create table 临时表 as
select a.字段1,a.字段2,MAX(a.ROWID) dataid from 正式表 a GROUP BY a.字段1,a.字段2;
delete from 表名 a
where a.rowid !=
(
select b.dataid from 临时表 b
where a.字段1 = b.字段1 and
a.字段2 = b.字段2
);
commit;
二、完全删除重复记录
对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:
select distinct * from 表名
可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:
CREATE TABLE 临时表 AS (select distinct * from 表名);
truncate table 正式表; --注:原先由于笔误写成了drop table 正式表;,现在已经改正过来
insert into 正式表 (select * from 临时表);
drop table 临时表;
如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从临时表将数据导入正式表中,如下
INSERT INTO t_table_bak
select distinct * from t_table;
三、怎样快速删除oracle数据库
最快的方法就进入注册表 在运行……里输入regedit.
依次展开HKEY_LOCAL_MACHINE SOFTWARE
找到ORACLE节点。删除。
然后删除ORACLE数据文件,安装的时候选的路径。
最后删除oracle引导文件,在系统盘符的Program Files 里面删除oracle文件夹。
发表评论
-
Oracle的EM(OracleDBConsoleorcl服务)无法启动的问题解决
2012-03-14 09:26 2829Oracle的EM(OracleDBConsoleorcl ... -
解决OracleDBConsoleorcl服务无法启动问题
2012-03-07 14:25 0Windows 不能在 本地计算机 启动 OracleDBCo ... -
oracle中的exists和not exists和in用法详解
2012-02-22 15:55 892有两个简单例子,以说明 “exists”和“in”的效率 ... -
Oracle分页,Oracle中rownum与rowid的理解
2012-02-16 15:02 1460一、 Oracle中 rownum与rowid的理解 ... -
ORACLE中字符串比较
2012-02-15 10:34 1859在oracle中,将空字符串 ... -
char varchar varchar2 的区别
2011-12-26 16:04 915char varchar varchar2 的区别 ... -
ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
2011-12-23 12:26 1013早上同事用PL/SQL连接 ... -
详解查看Oracle用户权限的七种方法
2011-12-23 11:32 762查看Oracle用户权限一般要通过一些实际 ... -
Oracle中TO_DATE格式
2011-12-09 08:57 677TO_DATE格式(以时间:2007-1 ... -
Oracle sys和system用户、sysdba 和sysoper系统权限、sysdba和dba角色的区别
2011-12-07 16:14 977转自:http://blog.csdn.net/wh62 ... -
一个修改Oracle用户密码的小诀窍
2011-12-03 16:34 1656有时候我们可能不知道一个用户的密码,但是又需要以这个用户做一 ... -
(oracle)只有 DBA 才能导入由其他 DBA 导出的文件
2011-11-29 14:29 1565连接到: Oracle Database 10g Enterp ... -
oracle定时任务(dbms_job)
2011-11-15 08:57 756原文地址:http://publish.it168.com/2 ... -
oracle中的tnsname.ora 参数解释
2011-10-20 09:36 1632可以在客户端机器上使 ... -
不安装Oracle客户端远程连接Orcale数据库
2011-10-20 09:36 1832第一种方法: 最近有 ... -
PLSQL 连接远程的ORACLE数据库解决方案
2011-10-20 09:36 1113PLSQL Developer连接远程的ORACLE数 ... -
oracle 常用函数nvl decode userenv greatest least
2011-10-10 15:04 1408如下3个函数,分别用新内容代替字段的空值://比如说用其他 ... -
to_char 和to_date的说明
2011-10-10 15:05 856to_char DATE 类型转换为 VARCHAR2 t ... -
To_Date函数用法
2011-10-09 15:11 1372To_Date函数用法 spl>select ... -
Oracle中dual的意思
2011-10-09 14:47 1364这是个虚拟表,在操作 ...
相关推荐
Oracle查询重复数据与删除重复记录方法,Oracle查询重复数据与删除重复记录方法
删除表中产生的重复数据,并且不会损害和修改原表数据.
ORACLE删除重复数据
OracleSQL实例-删除重复数据行留最新日期实例.pdf 学习资料 复习资料 教学资源
oracle中如何删除重复数据,方便大家下载
如何高效删除Oracle数据库中的重复数据.重复数据删除技术可以提供更大的备份容量,实现更长时间的数据保留,还能实现备份数据的持续验证
oracle中删除重复的数据,你们都用什么方法呢,我觉得很不错的去重复数据的方法,给大家分享一下
Oracle查询重复数据并删除,只保留一条记录.docx
oracle数据库各种删除重复数据方法
我们可能会出现这种情况,某个表原来设计不周全,导致表...一、对于部分字段重复数据的删除 先来谈谈如何查询重复的数据吧。 下面语句能够查询出那些数据是重复的: select 字段1,字段2,count(*) from 表名 group
ORACLE删除重复数据的一种高效的方法.
oracle 数据库中重复的记录行的清理删除方法,总结了几种比较可行的方法路径并分析了方法的优劣
oracle删除重复记录性能分析平时收集,希望能给需要帮助的人提供便利
oracle删除非主键重复类型的数据,oracle删除非主键重复类型的数据
oracle删除重复数据方法。希望对大家有用。谢谢!
一、背景 一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录。 二、解决 ...Oracle删除重复数据的SQL(删除所有): 删除重复数据的基本结构写法: 想要删除这些
查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group by Id having count(Id) > 1)2、删除表中多余的重复记录,...
Oracle数据库删除重复记录的方法
几个删除重复记录的SQL语句 1.用rowid方法 2.用group by方法 3.用distinct方法 1。用rowid方法
Oracle数据库删除表中重复记录的方法三则.txt