MySQLで重複行を削除する方法

MySQLで重複行を削除する方法

SQL文

/*
MySQL で重複行を削除するいくつかの方法 ---Chu Minfei
---2010-08-12 22:49:44.660
--引用または転載する場合は出典を明記してください: http://blog.csdn.NET/feixianxxx
*/
----------------すべてのフィールドが繰り返されます------------------------
 --1 テーブル置換を使用して重複を削除します。create table test_1(id int,value int);
 test_1 を挿入、1,2 を選択、すべて結合、1,2 を選択、すべて結合、2,3 を選択;
 -- ソース テーブルと同じ構造を持つ空の一時テーブルを作成します。create table tmp like test_1;
 -- 一時テーブルに一意のレコードを挿入します。 insert tmp select distinct * from test_1;
 --元のテーブルを削除します。drop table test_1;
 -- 一時テーブル名をターゲット テーブルに変更します。rename table tmp to test_1;
 --showmysql> test_1 から * を選択します。
+------+-------+
| ID | 値 |
+------+-------+
| 1 | 2 |
| 2 | 3 |
+------+-------+
 --2. auto_increment属性列を追加します(この方法はMyISAMまたはBDBエンジンテーブルでのみ使用できます)
 テーブル test_1(id int,value int) を作成します。engine=MyISAM;
 test_1 を挿入、1,2 を選択、すべて結合、1,2 を選択、すべて結合、2,3 を選択;
 test_1 テーブルを変更し、id2 int not null auto_increment を追加します。
 主キー(id,value,id2)を追加します。
 test_1 から * を選択します。
+----+-------+-----+
| id | 値 | id2 |
+----+-------+-----+
| 1 | 2 | 1 |
| 1 | 2 | 2 |
| 2 | 3 | 1 |
+----+-------+-----+
  id2<>1 の場合、test_1 から削除します。
  テーブル test_1 を変更し、id2 を削除します。
  test_1 から * を選択します。
  +----+-------+
| ID | 値 |
+----+-------+
| 1 | 2 |
| 2 | 3 |
+----+-------+
-------------------一部のフィールドが重複しています---------------------
--1. create table test_2 (id int, value int); でインデックスを追加します。
 test_2 を挿入、1,2 を選択、すべて結合、1,3 を選択、すべて結合、2,3 を選択;
 IGNOREテーブルtest_2を変更し、主キー(id)を追加します。
 test_2 から * を選択します。
 +----+-------+
| ID | 値 |
+----+-------+
| 1 | 2 |
| 2 | 3 |
+----+-------+
 レコード 1 3 が消えていることがわかります。列に NULL 値が存在する可能性があるので、ここでも Unique 制約を使用できますが、ここでは NULL が複数存在する可能性があります。
 --2.結合テーブル削除 create table test_2(id int,value int);
 test_2 を挿入、1,2 を選択、すべて結合、1,3 を選択、すべて結合、2,3 を選択;
 test_2からAを削除 a join (select MAX(value) as v,ID from test_2 group by id) b
 a.id=b.id かつ a.value<>bv の場合;
 test_2 から * を選択します。
 +------+-------+
| ID | 値 |
+------+-------+
| 1 | 3 |
| 2 | 3 |
+------+-------+
--3. Increment_auto を使用することも、上記のすべてのフィールドから重複を削除する 2 番目の方法になります --4. エラーが発生しやすい方法 --サブクエリ メソッドを思いつく友人もいるかもしれません。試してみましょう。create table test_2 (id int, value int);
 test_2 を挿入、1,2 を選択、すべて結合、1,3 を選択、すべて結合、2,3 を選択;
 存在する場合は test_2 から a を削除します(a.id=id かつ a.value<value の場合、test_2 から * を選択)。
 /*エラー 1093 (HY000): FROM 句で更新のターゲット テーブル 'a' を指定することはできません*/
 
 現在、テーブルから削除したり、サブクエリで同じテーブルから選択したりすることはできません。
 
 
 ------------------特定の重複行を削除する-------------
 --主に+limitまたは直接limitによる順序で 
 テーブル test_3(id int、value int) を作成します。
 test_3 を挿入、1,2 を選択、すべて結合、1,3 を選択、すべて結合、1,4 を選択、すべて結合、2,3 を選択;
 -- これは、ID=1 値が最も小さいレコードを保持し、他の ID を持つレコードを削除します。delete from test_3 where id=1 order by value desc limit 2;
 test_3 から * を選択します。
+------+-------+
| ID | 値 |
+------+-------+
| 1 | 2 |
| 2 | 3 |
+------+-------+
 レコードを削除して1つだけ残したい場合は、次の方法で注文を削除できます。

以下もご興味があるかもしれません:
  • MySQLで重複行を削除する方法
  • MySQLデータベースでサポートされているストレージエンジンの比較
  • MySQLはインデックスプッシュダウンを数秒で理解するのに役立ちます
  • MySQL で重複行を見つけて削除する方法

<<:  ReactでのsetStateの使用と同期と非同期の使用

>>:  ubuntu16.04 で nginx を完全にアンインストールするための関連コマンド

推薦する

React でインデックスをキーとして使用することが推奨されないのはなぜですか?

1. 古い仮想DOMと新しい仮想DOMを比較し、まずキーが同じかどうかを確認します。 2. 引き続...

docker を使用して Spring Boot をデプロイし、Skywalking に接続する方法

目次1. 概要1. スカイウォーキング入門2. スカイウォーキング建築3. スカイウォーキングはどの...

プロセスのすべての情報を表示するLinuxメソッドの例

サーバー上にタスク プロセスがあります。 ps -ef | grep task を使用して表示すると...

CSS 3D からソースコードによる空間座標軸へ

かつて、サイコロを振るゲームについて話しました。その時は、steps 属性 + スプライト画像を使用...

MySQL 自動インクリメント ID 枯渇の例

ディスプレイ定義IDテーブルに定義された自動増分IDが上限に達した場合、次のIDを申請する際に得られ...

クリック範囲を拡大する入力チェックボックスを実装する方法

XML/HTML コードコンテンツをクリップボードにコピー< div style = &quo...

ウェブデザインレイアウトの理解

<br />矛盾が生じます。私たちのような小さな工房では、デザインとレイアウトは基本的に...

HTMLは角丸四角形を簡単に実装します

質問: div+css と配置を使用して角丸四角形を実現するにはどうすればよいですか?ソリューション...

MySQLデータクエリが多すぎるとOOMが発生するかどうかについての簡単な議論

目次サーバー層でのフルテーブルスキャンの影響InnoDB におけるフルテーブルスキャンの影響Inno...

Tencent インタビュー: SQL ステートメントの実行が非常に遅くなる理由は何ですか? ---後悔シリーズは見ないで(推奨)

正直に言うと、この質問には MySQL のコア知識がかなり必要で、コンピュータ ネットワークの知識を...

複数の例で HTML フォームを使用する方法

参考までに、HTMLフォームの使い方を9つの簡単な例で分析します。具体的な内容は次のとおりです。 1...

1 分で Nginx のバージョンをスムーズにアップグレードおよびロールバックする方法

今日は、企業の実際の本番環境でよく遭遇する、Nginx を新しいバージョンにアップグレードし、古いバ...

Centos7環境でYUMを構築する方法

1. yumソースの設定ファイルを入力します 2.lsで設定ファイルを表示する 3. ディレクトリを...

美しい FLASH ウェブサイト デザイン例 50 選

Flashにより、デザイナーや開発者はブラウザ上でリッチなコンテンツを提供し、動き、インタラクティブ...