ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 重复数据清理

重复数据清理

原创 Linux操作系统 作者:hb0860 时间:2010-11-02 10:03:30 0 删除 编辑
清理重复数据:
(1).适用于有大量重复记录的情况(在C1,C10和C20列上建有索引的时候,用以下语句效率会很高):
delete cz where (c1,c2,c3) in (select c1,c2,c3 from cz group by c1,c2,c3 having count(*)>1) and rowid not in  (select min(rowid) from cz group by c1,c2,c3 having count(*)>1);
delete cz where rowid not in(select min(rowid) from cz group by c1,c2,c3);
(2).适用于有少量重复记录的情况(注意,对于有大量重复记录的情况,用以下语句效率会很低):
delete from cz a where a.rowid!=(select max(rowid) from cz b where a.c1=b.c1 and a.c2=b.c2 and a.c3=b.c3);
delete from cz a where a.rowid<(select max(rowid) from cz b wherea.c1=b.c1 and a.c2=b.c2 and a.c3=b.c3);
delete from cz a where rowid <(select max(rowid) from cz  where a.c1=b.c1 and a.c2=b.c2 and a.c3=b.c3);
(3).适用于有少量重复记录的情况(临时表法):
create table test as select distinct * from cz; (建一个临时表test用来存放重复的记录)
truncate table cz;  (清空cz表的数据,但保留cz表的结构)
insert into cz select * from test;  (再将临时表test里的内容反插回来)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/38006/viewspace-677199/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-11-20

  • 博文量
    31
  • 访问量
    58401