1 つ以上のフィールドに基づいて重複データを検索する MySQL SQL ステートメント

1 つ以上のフィールドに基づいて重複データを検索する MySQL SQL ステートメント

SQLはテーブル内の重複レコードをすべて見つけます

1. テーブルには id と name の 2 つのフィールドがあります。重複する名前を持つすべてのデータを検索します。

 xi a から * を選択します。ここで (a.username) です (xi グループからユーザー名を選択します。ユーザー名は count(*) > 1 を持ちます)

2. すべてのデータを検索してグループ化した後、繰り返しデータの繰り返し回数のクエリ データが最初にリストされます。

 select count(username) as '繰り返し回数',username from xi group by username having count(*)>1 order by username desc

3. 他の人の結果を表示するには、重複レコードを照会および削除する方法は次のとおりです。

1. テーブル内の重複レコードを検索します。重複レコードは単一のフィールド (peopleId) に基づいて決定されます。

 人から*を選択
peopleId が (count(peopleId) > 1 を持つ peopleId で people グループから peopleId を選択)

2. テーブル内の冗長な重複レコードを削除します。重複レコードは、単一のフィールド (peopleId) に基づいて決定されます。最小の rowid を持つレコードのみが保持されます。

 人から削除する 
peopleId が (count(peopleId) > 1 を持つ peopleId で people グループから peopleId を選択)
行IDが含まれていません(count(peopleId)>1を持つpeopleIdでpeopleグループからmin(rowid)を選択)

3. テーブル内の重複レコードを検索する(複数のフィールド)

 履歴書Aから*を選択
(a.peopleId、a.seq) が (count(*) > 1 を持つ peopleId、seq で vitae グループから peopleId、seq を選択) にある場合

4. テーブル内の重複レコード(複数のフィールド)を削除し、最小のROWIDを持つレコードのみを残します。

 履歴書から削除
(a.peopleId、a.seq) が (count(*) > 1 を持つ peopleId、seq で vitae グループから peopleId、seq を選択) にある場合
ROWID が (count(*)>1 を持つ peopleId、seq による vitae グループから min(rowid) を選択) に含まれません

5. テーブル内の重複レコード(複数のフィールド)を検索し、最小のROWIDを持つレコードを除外する

 履歴書Aから*を選択
(a.peopleId、a.seq) が (count(*) > 1 を持つ peopleId、seq で vitae グループから peopleId、seq を選択) にある場合
ROWID が (count(*)>1 を持つ peopleId、seq による vitae グループから min(rowid) を選択) に含まれません

(二)

例えば

テーブル A には「名前」フィールドがあります。

また、異なるレコード間の「名前」値は同じになる場合があります。

ここで、テーブル内のレコードの中で重複した「名前」値を持つ項目を見つける必要があります。

 名前とカウント(*)を、カウント(*) > 1 を持つ名前でグループから選択します。

性別が同じ場合、結果は次のようになります。

 名前、性別、カウント(*)が1より大きいグループから名前、性別、カウント(*)を選択します

(三つ)

方法1

@max 整数、@id 整数を宣言します
cur_rowsカーソルをローカルに宣言する 
テーブル名からプライマリフィールド count(*) を選択し、プライマリフィールド count(*) でグループ化します >;
cur_rows を開き、@id、@max に cur_rows をフェッチします (@@fetch_status=0)
始める
 @max = @max -1 を選択
 行数を@maxに設定
 プライマリフィールドが @id であるテーブル名から削除します
cur_rows を @id,@maxend に取得します
cur_rowsを閉じる
行数を0に設定

方法 2: 重複レコードには 2 つの意味があります。1 つは完全に重複したレコード、つまりすべてのフィールドが繰り返されているレコードです。もう 1 つは、一部のキー フィールドが繰り返されているレコードです。たとえば、名前フィールドが繰り返され、他のフィールドは繰り返されない可能性があり、繰り返されているすべてのフィールドを無視できます。

1. 最初のタイプの繰り返しは、解決が簡単です。

 テーブル名から別の*を選択

重複レコードのない結果セットを取得できます。

テーブルから重複レコードを削除する必要がある場合(重複レコードを1つだけ保持する)、

次のように削除できます

 tableName から #Tmp に distinct * を選択
テーブルテーブル名を削除します
#Tmp から tableName に * を選択
テーブル #Tmp を削除します

この重複はテーブルの設計が不適切であるために発生し、一意のインデックス列を追加することで解決できます。

2. このタイプの重複問題では、通常、重複レコードの最初のレコードを保持する必要があります。操作方法は次のとおりです。重複フィールドが名前と住所であり、これら 2 つのフィールドに対して一意の結果セットを取得する必要があると仮定します。

 autoID として identity(int,1,1) を選択し、* を #Tmp に tableName から入力します。
名前、自動ID で #Tmp グループから min(自動ID) を自動 ID として #Tmp2 に選択します。
#Tmp から * を選択し、autoID が in であることを確認します (#tmp2 から autoID を選択)

最後の選択では、一意の名前とアドレスを含む結果セットが返されます (ただし、追加の autoID フィールドが含まれますが、これは書き込み時に選択句で省略できます)。

(IV) 重複クエリ

 select * from tablename where id in (select id from tablenamegroup by idhaving count(id) > 1)

フィールドの重複レコードを検索する

sample_code フィールドに基づいて重複レコードを検索する

SELECT * FROM tb_table WHERE sample_code IN( SELECT sample_code FROM tb_table GROUP BY sample_code HAVING COUNT(sample_code) > 1 );

複数のフィールドの重複レコードを検索します(ここでは 2 を例に挙げます)

名前とコードフィールドに基づいて重複レコードを検索する

SELECT * from (SELECT *, CONCAT(name,code) as nameAndCode from tb_table) t WHERE t.nameAndCode in 
(
 SELECT nameAndCode from (SELECT CONCAT(name,code) as nameAndCode from tb_table) tt GROUP BY nameAndCode HAVING count(nameAndCode) > 1
)

要約する

上記は、1 つ以上のフィールドに基づいて重複データを検索するために紹介した MySQL SQL ステートメントです。お役に立てば幸いです。ご質問がある場合は、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQLテーブル内の重複レコードを見つける
  • MySQLで重複データを見つけて削除し、1つの例だけを残す方法の詳細な説明
  • MySQLテーブル内の重複データをクエリする方法
  • MySQLデータベース内の重複データを削除する方法の概要
  • MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)
  • 重複データを処理するための非常に包括的なMySQLコード
  • MySQL データベース内の重複レコードを削除する方法のまとめ [推奨]
  • MYSQLにデータを挿入する際に重複データを無視する方法を共有する
  • MySQLは重複しないデータ挿入を実装するためにUNIQUEを使用する
  • 重複したMySQLレコードを現場でチェックし、処理する実践的な記録

<<:  Linux (Ubuntu) ユーザーがログイン時に N 回連続して間違ったパスワードを入力すると、システムは自動的に X 分間ロックされます。

>>:  自動ロック画面機能を実現するjs

推薦する

Vue+Bootstrapでシンプルな学生管理システムを実現

参考までに、vueとbootstrapを使って比較的シンプルな生徒管理システムを作りました。具体的な...

JSはストップウォッチタイマーを実装します

この記事の例では、ストップウォッチタイマーを実装するためのJSの具体的なコードを参考までに共有してい...

Vueデータ変更検出の基本的な実装の簡単な分析

目次1. オブジェクトの変更検出2. オブジェクトに関する質問配列変更検出3.1 背景3.2 実装I...

Windows システムに mysql5.7.21 をインストールするための詳細なチュートリアル

MySQL インストーラーは、MySQL ソフトウェアのあらゆるニーズに対応する、使いやすいウィザー...

JS を使用してデータ型を決定する 4 つの方法

目次序文1. 型2. インスタンス3. コンストラクター詳細: 4. 文字列要約する序文Javasc...

MySQLとRedisキャッシュ間の同期ソリューションについての簡単な説明

目次1. ソリューション 1 (UDF)デモケース2. ソリューション2(binlogの解析)キャナ...

Linux Tensorflow2.0のインストール問題を解決する

conda アップデート conda pip で tf-nightly-gpu-2.0-previ...

Linuxカーネルスケジューラソースコード初期化の分析

目次1. はじめに2. スケジューラの基本概念2.1. 実行キュー (rq) 2.2 スケジューリン...

設定操作からMySQLへのNULLが見つからない問題を解決する

興味深い発見:合計 1000 件のレコードを含むテーブルがあります。クエリ ステートメントは次のよう...

Vue フロントエンド開発における keepAlive の使用方法の詳細な説明

目次序文keep-avlive フック関数keep-avliveはどのコンポーネントをキャッシュする...

仮想マシンを作成し、VMware に Redhat Linux オペレーティング システムをインストールする (グラフィック チュートリアル)

VMware で仮想マシンを作成し、Redhat Linux オペレーティング システムをインスト...

Linux でのルーティングと仮想マシン ネットワークの設定に関する詳細なグラフィック説明

ルーティングとは何ですか?ルーティングとは、相互接続されたネットワークを介して送信元ステーションから...

プレーヤー機能を実現するためのvue + element uiのサンプルコード

効果画像のない表示は単なる空虚な言葉です。 1. オーディオをベースにし、elementUI と組み...

Dockerfile を使用して nginx イメージを構築する例

Dockerfile の紹介Docker は、Dockerfile の内容を読み取ってイメージを自動...

mysql の存在する例と存在しない例の詳細な説明

mysql の存在する例と存在しない例の詳細な説明テーブルA |列1 | 列1 | 列3 |テーブル...