【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删除重复数据,只保留最新的一条数据(rowid为实际存储数据的物理id,所以越大说明插入的越后,即越新)
delete from 表名 a
where a.rowid !=
(
select max(b.rowid) from 表名 b
where a.字段1 = b.字段1 and
a.字段2 = b.字段2
)
数据量大的请执行:
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 表名);
delete from table 正式表;
insert into 正式表 (select * from 临时表);
drop table 临时表;
INSERT INTO t_table_bak
select distinct * from t_table;
本文出自 “HAPPY_CANDY” 博客,谢绝转载!
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。