一、对于部分字段重复数据的删除
方法一:
方法二:
这种先建临时表再进行删除的操作要比直接用一条语句进行删除要高效得多。
二、对于完全重复记录的删除
对于表中两行记录完全一样的情况,可以用下面语句获取到去掉重复数据后的记录:
select distinct * from 表名
可以将查询的记录放到临时表中,然后再将原来的表记录删除,最后将临时表的数据导回原来的表中。如下:
如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从临时表将数据导入正式表中,如下:
参考链接:http://fanqiang.chinaunix.net/db/oracle/2006-02-15/3974.shtml
方法一:
delete from 表名 a
where 字段1,字段2 in
(select 字段1,字段2,count(*)
from 表名 group by 字段1,字段2
having count(*) > 1)
方法二:
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 表名);
drop table 正式表;
insert into 正式表 (select * from 临时表);
drop table 临时表;
如果想删除一个表的重复数据,可以先建一个临时表,将去掉重复数据后的数据导入到临时表,然后在从临时表将数据导入正式表中,如下:
INSERT INTO t_table_bak
select distinct * from t_table;
参考链接:http://fanqiang.chinaunix.net/db/oracle/2006-02-15/3974.shtml