Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 15984|Odpoveď: 0

[Zdroj] MySQL [odstrániť redundanciu a nechať jednu] SQL príkaz dokončí zhrnutie myšlienky

[Kopírovať odkaz]
Zverejnené 13. 3. 2019 13:37:42 | | | |
Pred pár dňami, keď som robil požiadavku, potreboval som vyčistiť duplicitné záznamy v mysql a vtedy som mal v pláne napísať to cez code traversal, a potom som si myslel, že je to príliš zložité, myslel som si, že problém by som mal vedieť vyriešiť SQL príkazom. Po overení informácií a konzultácii so šéfom som prišiel s veľmi pohodlným sql výrokom, a tu sa s ním podelím a predstavím.

Analýza potrieb
Ak sú v databáze duplicitné záznamy, jeden z nich vymažte a ponechajte (či už kritériom na určenie duplicitných polí je viacero polí)


riešenie

Keď narazíte na túto potrebu, pravdepodobne máte v srdci nejakú predstavu. Najrýchlejšie, čo mi napadlo, bolo, že to vyriešim pomocou SQL príkazu, ale bol som príliš povrchný v zložitých SQL príkazoch, takže som chcel požiadať šéfa o pomoc.

Nájdi niekoho, kto ti pomôže

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

Own Baidu

Našiel som SQL príkaz:


Táto myšlienka SQL je zrejmá, existujú nasledujúce 3 kroky:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Vyžiadajte duplicitné záznamy v tabuľke ako podmienku
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Druhou podmienkou je najmenšia hodnota ID v duplicitných záznamoch v tabuľke dotazov
  • Nakoniec, podľa vyššie uvedených dvoch podmienok, vymažte zostávajúce duplicitné záznamy okrem najmenšieho ID v duplicitnom zázname


Bohužiaľ, pri spustení tohto príkazu je chyba, čo približne znamená, že tabuľka sa nedá aktualizovať súčasne s dotazom.


Kód vyriešený

Na základe vyššie uvedeného SQL vyjadrenia si myslím, že by ste mohli dosiahnuť rovnaký cieľ v dvoch krokoch cez kód:

  • Duplicitné dátové súbory sa vyberú ako prvé
  • Na základe dotazovaného datasetu sa zostávajúce duplikáty odstraňujú v slučke


Mal som nápad a rýchlo som ho napísal, ale bol som šokovaný, keď som ho spustil, a naozaj som ho potreboval116sľavo a doprava, a potom chcem nájsť SQL príkaz, ktorý môžem použiť, vložiť kód a bežiaci výsledok:




Perfektné [deduplikácia a ponechať jedno] SQL

Nakoniec som dostal dokonalú odpoveď v technickej skupine, pozrite sa na toto SQL vyhlásenie:


Vyššie uvedené SQL tvrdenie, ak sa pozriete pozorne, nie je ťažké pochopiť myšlienku a pravdepodobne je rozdelené do 3 krokov na pochopenie:

  • (SELECT min(id) id, user_id, monetary, consume_time FROM consum_record GROUP PODĽA user_id, monetary, consume_time HAVING count(*) > 1 ) t2 Vyžiadajte duplicitné záznamy na vytvorenie kolekcie (dočasná tabuľka t2), ktorá obsahuje minimálne ID každého duplicitného záznamu
  • consum_record.user_id = t2.user_id a consum_record.monetary = t2.monetary a consum_record.consume_time = t2.consume_time Asociované polia pre duplicitné kritériá
  • Vymažte záznamy s ID väčšími ako ID v T2 podľa podmienok


Keď som videl túto vetu, pomyslel som si, že je príliš silná. Takýto jednoduchý SQL príkaz dokáže vyriešiť taký zložitý problém a postoj tela rastie~
Je tiež veľmi rýchly na spustenie, pôvodné vykonávanie kódovej slučky trvá asi 116 sekúnd, ale tu stačí 0,3 sekundy, úžasné~







Predchádzajúci:javaEE video materiál október 2018
Budúci:SQL náhodne upravuje aktualizované dáta
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com