データベースにはさまざまな理由があるため、Oracleテーブルから重複する行を見つけて削除する必要があることがよくあります。データの問題を頻繁に解消するには、削除する必要があります。重複する行をOracleで削除する方法はたくさんありますが、元の行を保持します。この投稿では、それを実現するためのより高速な方法をいくつか紹介します。 rowidを使用する方法と使用しない方法を示します。テーブル内で行を複製するすべての列を特定し、SQLの適切な削除ステートメントでそれらすべての列を指定する必要があることに注意してください
Oracleから重複行を削除する方法
重複する行を簡単に削除する方法のいくつかを次に示します
(A)高速な方法ですが、すべてのOracleインデックス、トリガーを再作成する必要があります
create table my_table1 as select distinct * from my_table; drop my_table; rename my_table1 to my_table;
例
SQL> select * from mytest;ID NAME
------1 TST
2 TST
1 TST
SQL> create table mytest1 as select distinct * from mytest; Table created. SQL> select * from mytest1;ID NAME
-------2 TST
1 TST
SQL> drop table mytest; Table dropped. SQL> rename mytest1 to mytest; Table renamed. SQL> select * from mytest;ID NAME
-------2 TST
1 TST
(B)ROWIDを使用してOracleで重複レコードを検索および削除する方法。次の例は1つの列を示しています。2つの列に基づいて削除する場合は、2つの列を指定できます
Delete from my_table where rowid not in ( select max(rowid) from my_table group by my_col_name );
(C)oracleself-joinを使用して重複する行を削除します
DELETE FROM my_table A WHERE ROWID > (SELECT min(rowid) FROM my_table B WHERE A.key_values = B.key_values);
(D)exists句を使用する
delete from my_table t1 where exists (select 'x' from my_table t2 where t2.key_value1 = t1.key_value1 and t2.key_value2 = t1.key_value2 and t2.rowid > t1.rowid);
(E)Oracle分析関数を使用して重複レコードを削除する
delete from my_table where rowid in (select rid from ( select rowid rid, row_number() over (partition by column_name order by rowid) rn from my_table) where rn <> 1 )
示されているように、テーブル内の重複する行を削除する方法はたくさんあります。これらのコマンドは多くの状況で便利であり、要件に応じて使用できます。ステートメントを実行する前に、必ずバックアップが利用可能であることを確認してください。また、最初にクエリを使用して重複を見つけ、コミットする前に確認する必要があります
rowidを使用してOracleで重複レコードを見つける方法
select * from my_table
where rowid not in
(select max(rowid) from my_table group by column_name);
したがって、最初に上記のクエリを使用して重複を検索し、次にそれを削除すると、削除数は上記のクエリの行数と同じになります。次に、重複検索クエリを再度実行します。重複がない場合は、コミットできます
以下の記事を参照して、SQLを詳しく調べてください
Oracle Sqlチュートリアル:すべての有用なOraclesql記事のリストが含まれています。 OracleSqlを知っている場合でもOracleSqlについて学ぶためにそれらを探索してください
Oracleインタビューの質問:トップ49のOracleインタビューの質問と回答についてはこのページをチェックしてください:基本、インタビューに役立つOracleSQL。追加資料も提供されています
oracleのwhere句:データセットの制限、where句、sqlステートメントのwhere句、比較演算子の
Oracleの単一行関数:これをチェックして、sql、Oracleデータの単一行関数を確認してください関数、SQLの数値関数、SQLの文字関数
oraclesqlクエリ
blog.oracle.com