この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。
建築家
建築家
リスト
放送
茶屋
インテリジェントAI会話
.NETキャリア&テクニカルカレッジ
ちっちゃいなクズブログ
この版
利用者
Architect_Programmer_Code農業ネットワーク
»
建築家
›
データベース&データベース
›
MySQL
›
MySQL [Dedoubleand Leave One] SQL 文が完成 アイデアの概要 ...
眺める:
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は更新されたデータをランダムに修正します
関連記事
•
NAT(ネットワークアドレス変換)ネットワークアドレス変換
•
ブロックチェーンBase58、Base58Check、Bech32、Bech32mコーディングの詳細な説明
•
.NET/C#はWindows上でパケットのキャプチャや変更にWinDivertを使用しています
•
SQL Serverサーバーはデータベースの整合ルールを修正します
•
上海個人税リストの照会および輸出
•
ASP.NET Core (31) がgRPCメタデータ取得について
•
SQL SERVERデータベースはデフォルトの照合ルールを修正します
•
Linuxはrsyncを使って新しいサーバーにデータを同期します
•
Linuxでtcpdumpを使ってdockerコンテナのトラフィックを解析してください
•
SQL Serverのレプリケーションは、データベースを新しいデータベースにクローンします
閲覧したセクション
Microsoft SQL Server
リソースの共有
レジャー灌漑
HTML/CSS/JavaScript
フロントエンドフレーム
苦情の提案
.Net/C#
C/C++
技術チャット
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。
Mail To:help@itsvse.com