Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 15984|Răspunde: 0

[Sursă] MySQL [elimină redundanța și lasă una] O instrucțiune sql completează rezumatul ideii

[Copiază linkul]
Postat pe 13.03.2019 13:37:42 | | | |
Acum câteva zile, când făceam o cerință, trebuia să curăț înregistrările duplicate în mysql, iar ideea la acel moment era să scriu prin traversarea codului, apoi mi s-a părut prea complicat, gândindu-mă că ar trebui să pot rezolva problema cu o instrucțiune sql. După ce am verificat informațiile și am consultat șeful, am venit cu o declarație SQL foarte convenabilă, iar aici voi împărtăși această afirmație SQL și idei.

Analiza nevoilor
Dacă există înregistrări duplicate în baza de date, ștergeți și păstrați una dintre ele (indiferent dacă criteriile pentru determinarea câmpurilor duplicate sunt multiple câmpuri)


soluție

Când întâlnești această nevoie, probabil ai o idee în suflet. Cel mai rapid lucru la care m-am gândit a fost că aș putea rezolva cu o instrucțiune SQL, dar eram prea superficial la instrucțiuni SQL complexe, așa că am vrut să cer ajutorul șefului.

Găsește pe cineva care să te ajute

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

Propriul Baidu

Am găsit o instrucțiune SQL:


Această idee SQL este evidentă, există următorii 3 pași:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Interoghează înregistrările duplicate din tabel ca condiție
  • SELECT min(rowid) DIN grupul vitae BY peopleId, seq AVÂND număr(*) > 1 A doua condiție este cea mai mică valoare a ID-ului în înregistrările duplicate din tabelul de interogare
  • În cele din urmă, conform celor două condiții de mai sus, se șterg înregistrările duplicate rămase, cu excepția celui mai mic ID din înregistrarea duplicată


Dar, din păcate, există o eroare la rularea acestei instrucțiuni, ceea ce înseamnă aproximativ că tabelul nu poate fi actualizat în același timp cu interogarea.


Cod rezolvat

Pe baza instrucțiunii SQL de mai sus, cred că poți atinge același obiectiv în doi pași prin cod:

  • Seturile de date duplicate sunt extrase mai întâi
  • Pe baza setului de date interogat, duplicatele rămase sunt eliminate într-o buclă


Am avut o idee și am scris-o rapid, dar am fost șocat când am lansat-o și chiar aveam nevoie de ea116stânga și dreapta, apoi vreau să găsesc o instrucțiune SQL pe care să o pot folosi, să lipesc codul și rezultatul care rulează:




SQL perfect [deduplicare și leave one]

În sfârșit, am primit un răspuns perfect într-un grup tehnic, uită-te la această afirmație sql:


Afirmația SQL de mai sus, dacă te uiți cu atenție, nu este dificil să înțelegi ideea și probabil este împărțită în 3 pași pentru a fi înțeles:

  • (SELECT min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, monetary, consume_time HAVING count(*) > 1) t2 Interoghează înregistrările duplicate pentru a forma o colecție (tabelul temporar t2), care conține ID-ul minim al fiecărei înregistrări duplicate
  • consum_record.user_id = t2.user_id și consum_record.monetary = t2.monetary și consum_record.consume_time = t2.consume_time câmpuri Associate pentru criteriile duplicate
  • Ștergeți înregistrările cu ID-uri mai mari decât ID-urile în T2 conform condițiilor


Când am văzut această propoziție, m-am gândit că e prea puternic. O astfel de afirmație sql simplă poate rezolva o problemă atât de complexă, iar postura crește~
Este și foarte rapid de rulat, execuția buclei originale de cod durează cam 116s, dar aici 0,3s sunt suficiente, uimitor~







Precedent:Material video javaEE octombrie 2018
Următor:SQL modifică aleatoriu datele actualizate
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com