mysqlで重複したフィールドを削除する方法

PHPz
リリース: 2023-04-19 17:32:01
オリジナル
1591 人が閲覧しました

MySQL は、データの管理と保存に使用される業界で有名なリレーショナル データベース管理システムです。データ量が増加し続けるにつれて、データを効率的に管理しクリーンアップする方法がますます重要になります。この記事では、MySQL を使用して重複フィールドを削除する方法を紹介します。

MySQL では、DISTINCT を使用してさまざまな値を取得できますが、取得できるフィールドは 1 つだけです。テーブル内のすべての重複レコード (つまり、すべてのフィールドが同じレコード) を削除したい場合はどうすればよいでしょうか?

  1. どのフィールドを比較する必要があるかを決定し、GROUP BY を使用してこれらのフィールドをグループ化し、同じフィールドの値を同じグループに入れます。

たとえば、ID、名前、年齢、性別のフィールドを含むテーブルがあります。 id フィールドのみを保持し、他のフィールドが同じであるすべてのレコードを削除したいと考えています。

次のクエリを使用できます:

SELECT MIN(id), name, age, gender 
FROM table_name
GROUP BY name, age, gender
ログイン後にコピー

このクエリは、名前、年齢、性別フィールドに基づいてグループ化し、各グループの最小 ID 値を保持します。このようにして、他の ID 値を持つすべてのレコードを削除し、すべての異なる組み合わせを保持できます。

  1. 新しいテーブルを作成し、重複レコードを含まないデータを新しいテーブルにコピーしてから、元のテーブルを削除し、新しいテーブルの名前を元のテーブルの名前に変更します。

この方法では SQL ステートメントを手動で記述する必要がありますが、重複レコードのないデータのみが確実に保持される信頼性の高い方法です。 MySQL でこの方法を使用するための基本的な手順は次のとおりです。

-- 复制数据到新表
CREATE TABLE new_table_name LIKE old_table_name;
INSERT INTO new_table_name (id, name, age, gender)
SELECT MIN(id), name, age, gender 
FROM old_table_name 
GROUP BY name, age, gender;

-- 删除旧表,并将新表重命名为旧表名称
DROP TABLE old_table_name;
ALTER TABLE new_table_name RENAME TO old_table_name;
ログイン後にコピー

この方法を使用する場合は、データの完全なバックアップを確実に取得できるように注意する必要があります。同時に、データの整合性を確保するには、インデックスや外部キーなどの他の要素も考慮する必要があります。

3. サブクエリを使用して、テーブル内の重複レコードをすべて削除します。

これは単純ですが、データベースを直接操作する必要があり、データが誤って削除される可能性があるため、より危険な方法です。データのセキュリティを確保するために、使用前にデータをバックアップする必要があります。

DELETE FROM table_name WHERE id NOT IN ( 
   SELECT MIN(id) 
   FROM table_name 
   GROUP BY name, age, gender
);
ログイン後にコピー

このクエリは、ID 値が最小のレコード、つまり繰り返されていないレコードを選択し、テーブルに保持します。

これらの方法を使用する場合は、実際の状況に応じて適切な方法を選択する必要があります。同時に、データのバックアップや、誤操作の危険がないことを確認するための十分なテストにも注意を払う必要があります。

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

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