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 を完全にアンインストールするための関連コマンド

推薦する

JavaScript で実装された 7 つのソート アルゴリズムの概要 (推奨!)

目次序文バブルソート基本アルゴリズム2 番目の書き方は、基本的なアルゴリズムに基づいて改良されていま...

組み込みオブジェクトに関するJavascriptの基礎

目次1. 組み込みオブジェクトの紹介1.1 数学オブジェクト1.2 数学における方法1.3 日付オブ...

HTML コマンドラインインターフェースの実装

HTML部分コードをコピーコードは次のとおりです。 <!DOCTYPE html> &l...

Vueはグラフィック検証コードを実装する

この記事の例では、グラフィック検証コードを実装するためのVueの具体的なコードを参考までに共有してい...

UDP DUP タイムアウト UPD ポート状態検出コード例

以前、単純な UDP サーバーとクライアントの例を書きましたが、その中で、自分自身をクライアントと見...

SpringbootはDockerデプロイメントを統合し、Dockerイメージを構築する2つの方法を実装します。

Docker は、あらゆるアプリケーション用の軽量でポータブルな自己完結型コンテナーを簡単に作成で...

擬似分散グラフィックを実現するための VMware 構成 Hadoop チュートリアル

1. 実験環境シリアルナンバープロジェクトソフトウェアとバージョン1オペレーティング·システムCen...

ES6 配列のコピーおよびフィルメソッド copyWithin() および fill() の具体的な使用法

目次バッチコピー copyWithin()配列を埋めるメソッド fill()指数の計算方法については...

シームレスなトークンリフレッシュを実現する方法

目次1. 需要方法1方法2方法3 2. 実装3. 問題解決質問1: トークンの複数回の更新を防ぐ方法...

概要ページでのフロートとクリアフロート

1. フロート: 主な目的は、テキストを画像の周囲に折り返す効果を実現することです。また、複数列レイ...

Web 開発チュートリアル クロスドメイン ソリューションの詳細な説明

序文この記事では、主にWeb開発のためのクロスドメインソリューションを紹介し、参考と学習のために共有...

Vue カプセル化コンポーネント アップロード画像コンポーネント

この記事の例では、参考のためにvueアップロード画像コンポーネントの具体的なコードを共有しています。...

MySQL ロック(テーブルロック、行ロック、共有ロック、排他ロック、ギャップロック)の詳細な説明

現実世界では、鍵は外の世界から身を隠したいときに使用するツールです。コンピュータでは、複数のプロセス...

Vueカスタムコンポーネントは双方向バインディングを実装します

シナリオ:一般的に使用される親コンポーネントと子コンポーネント間の相互作用方法は次のとおりです。親コ...

MySQLテーブルにタイムスタンプを追加するいくつかの方法

シナリオ:テーブル内のデータは、同期ツールを使用して他のデータベースと同期する必要があり、増分同期に...