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

Oracleで重複したレコードを削除する方法

PHPz
リリース: 2023-04-04 10:00:03
オリジナル
7945 人が閲覧しました

Oracle データベースでは、データの複雑さと継続的な変更により、重複レコードが頻繁に発生し、システム エラーが発生し、データの整合性と精度に影響を与える可能性があります。したがって、Oracle データベース内の重複レコードを削除することが重要です。

以下では、重複レコードを迅速に削除するのに役立ついくつかの効果的な方法を紹介します。

1. DISTINCT キーワードを使用します

方法 1: "DISTINCT" キーワードを使用して、テーブルから重複レコードをすばやく削除します。次の SQL ステートメントを使用できます:

DELETE FROM table_name
WHERE rowid NOT IN (SELECT MIN(rowid) FROM table_name GROUP BY column1, column2, ..., column_n);
ログイン後にコピー

この SQL ステートメントでは、「DISTINCT」キーワードによって列が単純なセットに結合され、重複レコードが検索されます。 SELECT および GROUP BY ステートメントは、重複レコードを見つけて削除し、データの正確性を確保するために使用されます。

注: 単一列の場合、次の SQL コードを使用できます:

DELETE FROM table_name
WHERE rowid NOT IN (SELECT MIN(rowid) FROM table_name GROUP BY column_name);
ログイン後にコピー

2. ROW_NUMBER() 関数を使用します

方法 2: ROW_NUMBER() 関数パーティション化テクノロジーを使用して特定できます。 レコードを重複して削除します。

DELETE FROM table_name
WHERE rowid IN (
  SELECT row_id FROM (
    SELECT rowid row_id,
    ROW_NUMBER() OVER (PARTITION BY column2, column3 ORDER BY column1) duplicate_records_count
    FROM table_name
  ) WHERE duplicate_records_count > 1
);
ログイン後にコピー

この SQL ステートメントでは、「ROW_NUMBER()」関数を使用して重複レコードを特定し、削除しやすいように最初の重複レコードを「1」としてマークします。他の重複マーク付きレコード。パーティショニング テクノロジは、同一のレコードをグループ化し、グループに基づいて並べ替えて、データの正確性を保証します。

3. EXISTS サブクエリを使用する

方法 3: EXISTS サブクエリは WHERE 句を使用して重複レコードを削除できます:

DELETE table_name a
WHERE EXISTS (
  SELECT 1 FROM table_name b
  WHERE b.column1 = a.column1 AND b.column2 = a.column2 AND b.column3 = a.column3 AND b.rowid > a.rowid
);
ログイン後にコピー

この SQL ステートメントでは、「EXISTS」サブクエリは検索します現在の行に同じ値を持つレコード (つまり、「a」)。これらは重複レコードであるため、ROWID が異なります。したがって、ROWID a が ROWID b より大きい限り、重複レコードは削除できます。

4. セット演算子を使用する

方法 4: セット演算子を「SELECT」および「UNION ALL」演算子と組み合わせて、重複レコードを検索して削除できます。

DELETE FROM table_name
WHERE ROWID IN (
  SELECT ROWID FROM (
    SELECT column1, column2, column3, COUNT(*) duplicates
    FROM table_name
    GROUP BY column1, column2, column3
    HAVING COUNT(*) > 1
    UNION ALL
    SELECT column1, column2, column3, COUNT(*) duplicates
    FROM table_name
    GROUP BY column1, column2, column3
    HAVING COUNT(*) = 1
  ) a
  WHERE a.duplicates > 1
)
ログイン後にコピー

この SQL ステートメントでは、「UNION ALL」演算子が 2 つの SELECT ステートメントを結合して、重複レコードと非重複レコードを検索します。 HAVING 句は、重複したカウントを持つレコードをフィルタリングして削除するために使用されます。

要約すると、Oracle データベース内の重複レコードを削除するには、さまざまな方法とテクニックを使用できます。ニーズに基づいて適切な方法を簡単に選択してください。重複したレコードを削除するときは、システム データの整合性と正確性の保護に注意してください。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート