この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 15984|答える: 0

[出典] MySQL [冗長性を除去して残す]SQL文がアイデアの要約を完成させます

[リンクをコピー]
掲載地 2019/03/13 13:37:42 | | | |
数日前、要件を作っているときに、mysqlの重複したレコードを整理する必要があり、その時のアイデアはコードのトラバーサルで書くことだったのですが、SQL文で解決できるはずだと思い込み、複雑すぎると思いました。 情報を確認し、上司に相談した結果、とても便利なSQL文を思いつき、ここでそのSQL文とアイデアを共有します。

ニーズ分析
データベースに重複レコードがある場合は、そのうちの1つを削除して保持してください(重複フィールドの判定基準が複数のフィールドである場合に限ります)


解決

この必要性に直面したとき、おそらく心の中に何かイメージがあるでしょう。 一番早く考えたのはSQL文で解けるということでしたが、複雑なSQL文が浅かったので、上司に助けを求めたかったのです。

誰か助けてくれる人を探しましょう

因为这个需求有点着急,所以最开始想到的是,可以找这方面的同行来解决,然后分享这个问题给@赵七七同学,结果这货随便百度了一下,就甩给我一个从未用过的sql语句,让我自己尝试,心里万匹那啥啥啥奔腾而过...

百度の自社

SQL文を見つけました:


このSQLのアイデアは明白で、次の3つのステップがあります。

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 テーブル内の重複レコードを条件としてクエリしてください
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 2つ目の条件は、クエリテーブル内の重複レコードにおけるIDの最小値です
  • 最後に、上記の2つの条件に従い、重複レコード内の最小IDを除く残りの重複レコードを削除します


しかし残念ながら、この文を実行する際にエラーがあり、つまりテーブルをクエリと同時に更新できないことを意味します。


コード解決済み

上記のSQL文から、コードを通じて2つのステップで同じ目標を達成できるかもしれません。

  • 重複したデータセットはまず削除されます
  • クエリされたデータセットに基づいて、残りの重複はループで削除されます


アイデアがあって急いで書きましたが、実際に実行してみて本当に必要だったことに驚きました116左と右に並べて、使えるSQL文を探して、コードと実行中の結果を貼り付けたいです:




完全な[重複除去と1残り] SQL

ついに、技術グループで完璧な答えをもらいました。このSQL文を見てください:


上記のSQL文をよく見ると、その考え方は難しくなく、理解するためにおそらく3つのステップに分かれています。

  • (SELECT min(id) ID、user_id、貨幣、consume_time consum_recordグループから BY user_id、貨幣、consume_time COUNT(*) を持つ > 1 ) t2 重複レコードをクエリしてコレクション(一時テーブルt2)を形成します。そこには各重複レコードの最小IDが含まれています
  • consum_record.user_id = t2.user_id および consum_record.monetary = t2.monetary、consum_record.consume_time = t2.consume_time 重複条件のためのアソシエイトフィールド
  • 条件に従って、T2のIDより大きいレコードを削除してください


この文を見たとき、私はこれがあまりにも強力すぎると思いました。 こんな単純なSQL文で複雑な問題を解決でき、状況は上昇しています~
また、実行も非常に高速で、元のコードループ実行は約116秒かかりますが、ここでは0.3秒で十分です。驚きです~







先の:javaEE 2018年10月のビデオ資料
次に:SQLは更新されたデータをランダムに修正します
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com