ホームページ >データベース >mysql チュートリアル >1 つのレコードを保持しながら MySQL で重複行を効率的に削除する方法

1 つのレコードを保持しながら MySQL で重複行を効率的に削除する方法

Barbara Streisand
Barbara Streisandオリジナル
2025-01-23 13:21:10581ブラウズ

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

MySQL の重複行 (重複データ) を削除

質問:

一意の値ごとに 1 つのレコードを保持しながら、MySQL テーブルから重複行を削除するにはどうすればよいですか?

例:

名前テーブル内の次のデータについて考えてみましょう:

id name
1 google
2 yahoo
3 msn
4 google
5 google
6 yahoo

解決策:

警告: 必ず、最初にテーブルのテスト コピーに対してこの操作を実行するように注意してください。

重複する行をすべて削除し (1 行は保持)、最小または最大の ID 値を持つレコードを保持するには、次のクエリを使用します。

最小の ID 値を保持します:

<code class="language-sql">DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name</code>

最も高い ID 値を保持します:

<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 を追加してください。
  • この方法は計算コストが高く、テーブルが大きい場合は接続が切断される可能性があります。
  • 大きなテーブルの場合は、より高速な代替手段として DISTINCT を指定した INSERT の使用を検討してください。
<code class="language-sql">INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
    SELECT DISTINCT cellId,attributeId,entityRowId,value
    FROM tableName;</code>

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。