ホームページ > データベース > mysql チュートリアル > 1 つのレコードを保持したまま、MySQL で重複する行を効率的に削除するにはどうすればよいですか?

1 つのレコードを保持したまま、MySQL で重複する行を効率的に削除するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-23 13:37:10
オリジナル
687 人が閲覧しました

How Can I Efficiently Delete Duplicate Rows in MySQL While Keeping One Record?

MySQL 重複行削除ガイド: 一意のレコードを効率的に保持する

この記事では、MySQL テーブルから重複データを削除し、重複データの各セットから 1 つのレコードを保持する方法について説明します。 SELECT DISTINCT を使用して一意の値をフィルターで除外することは可能ですが、この記事では DELETE コマンドを使用してこれを実現する方法に焦点を当てます。

重要なヒント:

偶発的なデータ損失を防ぐために、削除操作を実行する前に必ずテーブルをバックアップしてください。

最小の ID を持つレコードを保持します:

重複の中で最小の ID を持つ行を保持するには、次の SQL ステートメントを実行します:

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name;</code>
ログイン後にコピー

最大の ID を持つレコードを保持します:

重複の中で最大の ID を持つ行を保持するには、次の SQL ステートメントを実行します:

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name;</code>
ログイン後にコピー

その他の注意事項:

効率に関する警告:

上記の方法は効率的ではなく、データベース接続の過負荷を引き起こす可能性があります。

整合性要件:

AND n1.id < n2.id (または AND n1.id > n2.id) 句を含める必要があります。 この条件を無視すると、テーブル内のすべての行が削除される可能性があります。

代替:

パフォーマンスを向上させるには、次の INSERT および DISTINCT クエリの使用を検討してください。

<code class="language-sql">INSERT INTO tempTableName (cellId, attributeId, entityRowId, value)
SELECT DISTINCT cellId, attributeId, entityRowId, value
FROM tableName;</code>
ログイン後にコピー

その後、元のテーブルを削除し、一時テーブルの名前を変更できます。 この方法ではデータの直接削除が回避されるため、効率とセキュリティが向上します。

以上が1 つのレコードを保持したまま、MySQL で重複する行を効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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