データベースでは、重複データは削除する必要があるオブジェクトの 1 つであることがよくあります。 Oracle データベースには重複データを削除する複数の方法が用意されており、この記事ではそのうちのいくつかを紹介します。
UNIQUE 制約は、各テーブルの列に一意の値が格納されるようにするために Oracle データベースで使用されるメカニズムです。テーブル内の重複データを削除する場合は、重複を排除する必要がある列に UNIQUE 制約を追加し、INSERT IGNORE または REPLACE INTO ステートメントを通じてデータを挿入します。挿入中に重複データが見つかった場合、そのデータは無視されるか、新しいデータに置き換えられます。
たとえば、students という名前のテーブルがあり、そこには学生の学生番号と名前が含まれています。学生 ID の一意性を確保したい場合は、次のステートメントを使用できます:
ALTER TABLE students ADD CONSTRAINT unique_stu_id UNIQUE (stu_id);
このステートメントでは、stu_id 列のデータの一意性を確保するために、Students テーブルに UNIQUE 制約を追加します。 。
ROWID は Oracle データベースの非常に特殊な列で、データの各行を一意に識別できます。 ROWID を通じて重複データを削除できます。以下は、ROWID を使用して重複データを削除する例です。
DELETE FROM students WHERE ROWID NOT IN (SELECT MAX (ROWID) FROM students GROUP BY stu_id, name);
このステートメントでは、サブクエリを使用して、繰り返される stu_id と名前の組み合わせごとに最大の ROWID 値を持つデータ行を検索し、それを検索します。データは保持され、残りのデータは削除されます。
一時テーブルを使用して重複データを削除することも、頻繁に使用される方法です。まず一時テーブルを作成し、次に重複排除する必要があるデータを一時テーブルに挿入し、次に元のテーブルのデータを削除し、最後に一時テーブルのデータを元のテーブルに再挿入する必要があります。この方法ではデータの整合性と一貫性を確保できますが、より多くの時間とスペースが必要になります。
次は、一時テーブルを使用して重複データを削除する例です。
CREATE TABLE students_new AS SELECT DISTINCT * FROM students; TRUNCATE TABLE students; INSERT INTO students SELECT * FROM students_new; DROP TABLE students_new;
このステートメントでは、students_new という名前の一時テーブルを作成し、students テーブルから重複データを削除します。次に、一時テーブルのデータを削除し、最後に一時テーブルのデータを学生テーブルに再挿入して、重複排除操作を完了します。
CTE (Common Table Expression) は、SQL ステートメント内に一時テーブルを定義できるメソッドです。 CTE を使用すると、データの重複排除操作を 1 つの SQL ステートメントで完了できます。次に、CTE を使用して重複データを削除する例を示します。
WITH CTE AS ( SELECT stu_id, name, ROW_NUMBER() OVER (PARTITION BY stu_id, name ORDER BY ROWID) RN FROM students ) DELETE FROM CTE WHERE RN > 1;
このステートメントでは、WITH キーワードを使用して CTE という名前の一時テーブルを定義し、ROW_NUMBER 関数を使用してデータの各行を割り当てます。 stu_id Number に名前を付け、最後に 1 より大きい行番号を持つデータを削除して、重複排除操作を完了します。
上記の方法は、Oracle データベース内の重複データを効果的に削除できます。どの方法を選択するかは、実際の状況とニーズによって異なります。たとえば、少量の重複データをすばやく削除したい場合は 2 番目の方法を使用でき、データ量が多い場合は 3 番目の方法または 4 番目の方法を使用できます。つまり、実際の状況に基づいて重複データを削除するための最適な方法を選択する必要があり、データの損失や操作エラーを避けるために、データを削除する前にバックアップとテストを行う必要があります。
以上がOracleのデータ重複排除の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。