数日前、ある要件に取り組んでいたとき、MySQL で重複レコードをクリーンアップする必要がありました。その時は、コード トラバーサルを使用して書き出すことを考えましたが、複雑すぎると感じたので、SQL ステートメントを使用して問題を解決する必要があると考えました。情報を確認し、専門家に相談した結果、非常に便利な SQL ステートメントを思いつきました。ここでは、この SQL ステートメントとアイデアを共有します。 需要分析 データベースに重複レコードがある場合は、1つを削除し、1つを残します(重複かどうかを判断する基準は複数のフィールドです) 解決 この要件に遭遇したとき、私はおそらくいくつかのアイデアを思い浮かべていたでしょう。最初に思い浮かぶのは、SQL 文で解決できるのではないかということですが、複雑な SQL 文の経験があまりないので、専門家に助けを求めたいと思っています。 助けてくれる人を見つける この要件は少し緊急なので、私が最初に考えたのは、この分野の同僚を見つけて解決し、同僚とこの問題を共有することでした。その結果、この人はBaiduを使って、私がこれまで使用したことのないSQLステートメントを提供し、自分で試してみるように頼みました。私の心にはたくさんのことが駆け巡りました... 百度 SQL ステートメントが見つかりました: 消去 から ビタミンA どこ (a.peopleId、a.seq) IN ( 選択 人物ID、 シーケンス から 履歴書 グループ化 人物ID、 シーケンス 持つ カウント(*) > 1 ) AND rowid が IN でない ( 選択 最小(ROWID) から 履歴書 グループ化 人物ID、 シーケンス 持つ カウント(*) > 1 ) この記述は、「MySQL で重複データを削除し、1 つだけ保持する」という記事に記載されています。この SQL ステートメントの考え方は非常に明確で、次の 3 つのステップがあります。 条件としてテーブル内の重複レコードを検索するには 最後に、上記の2つの条件に従って、重複レコードの最小IDを除く残りの重複レコードを削除します。 しかし残念ながら、このステートメントの実行中にエラーが発生しました。エラーの一般的な意味は、クエリと同時にテーブルを更新できないということです。 コードソリューション 上記の SQL ステートメントに基づいて、コードを通じて 2 つのステップで同じ目的を達成できます。 まず重複したデータセットを削除します クエリされたデータセットに従って、残っている重複データを削除するループを実行します。 アイデアが浮かんですぐに書き上げたのですが、実行してみると驚きました。約116 秒もかかってしまいました。そこで、使用できる SQL ステートメントを見つけなければならないと考えました。コードと実行結果を投稿しました。 完璧な[重複を削除して1つを残す]SQL ついに、技術グループから完璧な答えが得られました。次の SQL ステートメントをご覧ください。 消費レコードを削除する から 消費レコード、 ( 選択 最小(id) id、 ユーザーID、 金銭的、 消費時間 から 消費レコード グループ化 ユーザーID、 金銭的、 消費時間 持つ カウント(*) > 1 ) t2 どこ 消費レコード.user_id = t2.user_id そしてconsum_record.monetary = t2.monetary そして、consum_record.consume_time = t2.consume_time かつ、consum_record.id > t2.id; 上記の SQL ステートメントを注意深く見ると、その考え方を理解するのは難しくありません。次の 3 つのステップで理解できます。 条件に従って、IDがt2のIDより大きい元のテーブルのレコードを削除します。 この文章を見たとき、すごいと思いました。こんなに単純な SQL ステートメントで、こんなに複雑な問題を解決できるなんて、本当に興味深いですね。 実行速度も非常に速いです。元のコードループの実行には約116 秒かかりますが、ここでは0.3 秒しかかかりません。すごいですね。 要約する PHP プログラマーとして、SQL が遅れをとってはいけないのは当然です。しかし、現実にはやるべきことが多すぎて、現在の私の SQL レベルは平均的なレベルにすぎません。今後、この分野の知識を向上させる機会を見つけたいと思います。 今日はこれで終わりです。 以下もご興味があるかもしれません:
|
<<: js は、州、市、地区の 3 段階の選択カスケードを実装します。
>>: Tomcat が応答データグラムを書き戻すタイミングの詳細な分析
最近、WeChatミニプログラムは、監査ミニプログラムのwx.loginおよびwx.getUserI...
Docker は本当に素晴らしいです。特に、仮想マシンを使用する場合に比べて、Docker イメージ...
前回の記事では、MySQL の置換関数 (Replace) とセグメンテーション関数 (SubStr...
1. MySQLソフトウェアをインストールするMySQL 公式 Yum リポジトリ、MySQL バー...
* 住所 - 住所* blockquote - ブロック引用* center - 中央揃えブロック*...
1. Busyboxのソースコードをオンラインでダウンロードしてください。コンパイル方法については、...
「どうしたの?」特定の種類のダイアログ ボックスに慣れていない限り、ダイアログ ボックスが表示された...
1.すべてのIPアドレスが3つのページa1.htm、a2.htm、a3.htmにアクセスするのを禁止...
この記事の例では、古典的なマインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有し...
プロキシを有効にする2つの方法React には、直接使用できるカプセル化された Ajax リクエスト...
1. 概要いわゆるライフサイクル機能とは、特定の条件下で自動的にトリガーされる機能です。 2. VU...
1. フォーム<form id="" name="" ...
http://www.cppcns.com/shujuku/mysql/283231.html 8....
RGBAは色の値と透明度を設定できるCSSカラーです以下は、rgba() を使用して白色を 50% ...
この記事の例では、マインスイーパゲームを実装するためのjsの具体的なコードを参考までに共有しています...