MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)

MySQL クエリの重複データ (重複データを削除し、ID が最も小さいデータのみを保持します)

開発の背景:

最近、私はバッチ データを MySQL データベースにインポートする機能に取り組んでいます。バッチ インポートから、そのようなデータはデータベースに挿入される前に重複していると判断されないことがわかります。したがって、すべてのデータがインポートされた後にのみ、データの一意性を確保するためにデータを削除するステートメントが実行されます。

詳しい紹介を見てみましょう。

実戦:

テーブル構造は次の図に示されています。

意味: ブランド

操作:

SQL ステートメントを使用して、重複データがあるかどうかを照会します。

ブランドから*を選択 WHERE brandName IN (
select brandName from brand GROUP BY brandName HAVING COUNT(brandName)>1 #条件は重複データの数が1より大きいことです)

SQL を使用して冗長な重複データを削除し、最小の ID を持つ一意のデータを保持します。

注記:

間違った SQL: DELETE FROM brand WHERE brandName IN (select brandName from brand GROUP BY brandName HAVING COUNT(brandName)>1)
AND Id NOT IN (ブランドから MIN(Id) を選択、GROUP BY brandName、HAVING COUNT(brandName)>1)

ヒント: FROM句で更新のターゲットテーブル「brand」を指定することはできません

理由は、直接見つかったデータは、データを削除する条件として使用できないためです。まず、見つかったデータの一時テーブルを作成し、その一時テーブルを削除の条件として使用する必要があります。

正しいSQLの書き方:
 DELETE FROM brand WHERE brandName IN (SELECT brandName FROM (SELECT brandName FROM brand GROUP BY brandName HAVING COUNT(brandName)>1) e)
 AND Id NOT IN (SELECT Id FROM (SELECT MIN(Id) AS Id FROM brand GROUP BY brandName HAVING COUNT(brandName)>1) t)

#重複データのクエリでは最初の数項目のみが表示されるため、最小値かどうかをクエリする必要はありません。

結果は次のとおりです。


要約:

多くのことは、自分で段階的に調べる必要があります。もちろん、インターネット上の提案も非常に貴重な参考資料やリソースです。どのような開発を行うにしても、それをよりよく習得するには、その動作原理を理解する必要があります。

さて、以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただきありがとうございます。

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

<<:  React 星評価コンポーネントの実装

>>:  Linux の sudo 脆弱性により不正な特権アクセスが発生する可能性がある

推薦する

JavaScript ES6 分割演算子の理解と応用

目次序文脱構築記号の役割使い方分割割り当ての適用アプリケーションの簡単な紹介JSONデータを抽出する...

PXEを使用してLinuxシステムを自動的に展開する方法

目次背景DHCPの設定DHCP ファイル (動的ホスト構成プロトコル) の編集tftp 設定sysl...

jsネイティブウォーターフォールフロープラグイン制作

この記事では、jsネイティブウォーターフォールフロープラグインの具体的なコードを参考までに共有します...

js 配列 fill() 充填メソッド

目次1. fill() 構文2. fill() の使用3. まとめ序文:配列の初期化方法についてはよ...

HTML ページ内の js および css ファイルのキャッシュを自動的にクリーンアップします (バージョン番号を自動的に追加します)

Web プロジェクトの開発プロセスでは、CSS ファイルや JS ファイルを参照することがよくあり...

Vueのトグルボタンをクリックしてボタンを有効にし、無効にします。

実装方法は3つのステップに分かれています。テンプレートに 2 つのボタンを設定し、v-if と v-...

Linux でハイパースレッディング技術を動的に有効/無効にする方法の詳細な説明

序文Intel のハイパースレッディング テクノロジーにより、1 つの物理コア上で 2 つのスレッド...

JavaScript イベント ループのケース スタディ

js のイベント ループJavaScript はシングルスレッドなので、同じイベントで実行できるメソ...

UA による Web サイトのクロールを防ぐ Nginx のクローラー対策戦略

クローラー対策ポリシー ファイルを追加しました: vim /usr/www/server/nginx...

Windows 10 での Hyperledger Fabric 1.4 環境構築プロセスの図

内容Hyperledger fabric1.4環境のWindows 10でのセットアップ前提条件Wi...

Tomcat を使用して Centos 環境に SpringBoot WAR パッケージをデプロイする

戦争パッケージを準備する1. 既存のSpringBootプロジェクトを準備し、pomに依存関係を追加...

ネイティブ js でカスタム スクロール バーを実装する

この記事の例では、カスタムスクロールバーを実装するためのjsの具体的なコードを参考までに共有していま...

システムメンテナンスページにリダイレクトするように nginx を設定する

先週末、兄弟プロジェクトはより良いサービスを提供するためにサーバーを拡張する準備をしていました。兄弟...

マウス追従ゲームを実現するjs

この記事では、マウス追従ゲームを実装するためのjsの具体的なコードを参考までに共有します。具体的な内...

レスポンシブレイアウトの概要(推奨)

レスポンシブレイアウト開発の基礎知識この章は主に以下の部分に分かれています• レスポンシブデザインを...