ホームページ  >  記事  >  データベース  >  Oracle データベースから重複データを削除するための一般的な方法を要約して整理します。

Oracle データベースから重複データを削除するための一般的な方法を要約して整理します。

WBOY
WBOY転載
2022-08-22 17:59:303271ブラウズ

この記事では、Oracle に関する関連知識を提供し、主にデータ クリーニング中に削除されることが多いテーブル内の重複データについて紹介します。一緒に見てみましょう。皆さんのお役に立てれば幸いです。

Oracle データベースから重複データを削除するための一般的な方法を要約して整理します。

推奨チュートリアル: 「Oracle ビデオ チュートリアル

テスト データの作成

create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10));
insert into nayi224_180824
select 1, 2, 3 from dual union all
select 1, 2, 3 from dual union all
select 5, 2, 3 from dual union all
select 10, 20, 30 from dual ;
commit;
select*from nayi224_180824;
COL_1 COL_2 COL_3
1 2 3
1 2 3
5 2 3
10 20 30

指定された列、重複排除後の結果セットを確認してください

distinct

select distinct t1.* from nayi224_180824 t1;
##COL_1COL_2COL_3 #1015すべてのクエリ列のみを重複排除できるため、この方法は非常に制限されています。 Col_2 と Col3 を重複排除したい場合、結果セットには、col_2 列と Col_3 列のみを含めることができますが、col_1 は含めることができません。
20 30
2 3
2 3
select distinct t1.col_2, col_3 from nayi224_180824 t1

COL_2#220しかし、これは最もシンプルで理解しやすい方法でもあります。
COL_3
3
30

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
;

COL_1#123110 20301##書くのはかなり面倒ですが、柔軟性が高くなります。 指定された列について、すべての重複行を検索します。
COL_2 COL_3 RN

count が

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_21222テーブルを 2 回確認する必要がある場合、効率は比較的低くなります。お勧めしません。 カウントオーバー
COL_3
3 1
3 5
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_1

COL_2COL_3RN12331233523#テーブルを確認する必要があるのは 1 回だけです。推奨されます。 重複する行をすべて削除
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);
上記のステートメントは少し変更されています。
#3

重複データを削除し、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 ビデオ チュートリアル

以上がOracle データベースから重複データを削除するための一般的な方法を要約して整理します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。