テーブル内の重複データの削除

1195 ワード

一、一部フィールドの重複データの削除
方法1:

delete from    a 
where   1,  2 in
(select   1,  2,count(*) 
 from    group by   1,  2 
 having count(*) > 1)

方法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;

このような一時テーブルを作成してから削除する操作は、直接1つの文で削除するよりもずっと効率的です.
二、完全重複記録の削除
表の2行のレコードがまったく同じ場合、次の文で重複データを削除したレコードを取得できます.
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