この記事では、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 |
select distinct t1.* from nayi224_180824 t1;
COL_2 | COL_3 | |
---|---|---|
20 | 30 | |
2 | 3 | |
2 | 3 |
select distinct t1.col_2, col_3 from nayi224_180824 t1
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_2 | COL_3 | RN | |
---|---|---|---|
3 | 1 | 10 | |
30 | 1 | ##書くのはかなり面倒ですが、柔軟性が高くなります。 |
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_1
COL_3 | ||
---|---|---|
3 | 1 | |
3 | 5 | |
3 | テーブルを 2 回確認する必要がある場合、効率は比較的低くなります。お勧めしません。 |
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 ;
RN | 1 | ||
---|---|---|---|
3 | 1 | 2 | |
3 | 5 | 2 | |
#3 | #テーブルを確認する必要があるのは 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 を保持する」などの要件を達成したりできます。
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 サイトの他の関連記事を参照してください。