ホームページ >データベース >Oracle >Oracleで重複データを削除する方法

Oracleで重複データを削除する方法

coldplay.xixi
coldplay.xixiオリジナル
2021-01-04 17:36:2652655ブラウズ

重複データを削除する Oracle メソッド: 1. 指定された列のすべての重複行を見つけて削除します。メソッドは count を使用します。2. すべての重複行を削除します。コードは [delete from nayi224_180824 t where t .rowid in]。

Oracleで重複データを削除する方法

#この記事の動作環境: Windows7 システム、oracle9i バージョン、Dell G3 コンピューター。

推奨 (無料): oracle データベース

oracle は重複データを削除しますメソッド:

テスト データの作成

create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10));
insert into nayi224_180824select 1, 2, 3 from dual union allselect 1, 2, 3 from dual union allselect 5, 2, 3 from dual union allselect 10, 20, 30 from dual ;commit;select*from nayi224_180824;
##COL_1COL_2##123123523102030#指定された列について、重複排除後の結果セットを確認します
## COL_3

明確な

select distinct t1.* from nayi224_180824 t1;

##COL_1

COL_2COL_310203033この方法には大きな制限があります。すべてのクエリ列。 Col_2 と Col3 を重複排除したい場合、結果セットには、col_2 列と Col_3 列のみを含めることができますが、col_1 は含めることができません。
##1 2
5 2
select distinct t1.col_2, col_3 from nayi224_180824 t1
COL_2

COL_33 しかし、これは最もシンプルで理解しやすい方法でもあります。 row_number()
select *  from (select t1.*,
               row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn          
               from nayi224_180824 t1) t1 where t1.rn = 1;
#2
20 30

COL_1

COL_2COL_3#123110 20301##書くのはかなり面倒ですが、柔軟性が高くなります。 #count が
RN
#指定された列について、すべての重複行を検索します
#
select *  from nayi224_180824 t 
where (t.col_2, t.col_3) in (select t1.col_2, t1.col_3                                
from nayi224_180824 t1                               
group by t1.col_2, t1.col_3                              
having count(1) > 1)

#COL_1COL_2

COL_3

##112#52 3カウントオーバー
select *  from (select t1.*,               
count(1) over(partition by t1.col_2, t1.col_3) rn          
from nayi224_180824 t1) t1 where t1.rn > 1;
COL_1COL_2
2 3
3
#テーブルを 2 回チェックする必要があるため、効率は比較的低くなります。お勧めしません。

COL_3

RN

##11233 3テーブルを確認する必要があるのは 1 回だけです。推奨されます。 重複行をすべて削除 は、上記のステートメントを少し変更したものです。 分析関数メソッド
2 3 3
##5 2
3
delete from nayi224_180824 t where t.rowid in (                   
select rid                     
from (select t1.rowid rid,                                   
count(1) over(partition by t1.col_2, t1.col_3) rn                              
from nayi224_180824 t1) t1                    
where t1.rn > 1);
重複データを削除し、1 つを保持
delete from nayi224_180824 t where t.rowid in (select rid                     
from (select t1.rowid rid,
    
    row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn                             
    from nayi224_180824 t1) t1                    
    where t1.rn > 1);

一貫した高い柔軟性を備えた分析関数を備えています。グループ化を自由に実行したり、orderby 句を変更して「最大 ID を保持する」などの要件を達成したりできます。

group by

delete from nayi224_180824 t where t.rowid not in
       (select max(rowid) from nayi224_180824 t1 group by t1.col_2, t1.col_3);

効率を高める代わりに柔軟性を犠牲にします。

以上がOracleで重複データを削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。