Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 15984|Odpověď: 0

[Zdroj] MySQL [odstraňte redundanci a nechte ji] SQL příkaz dokončuje shrnutí myšlenky

[Kopírovat odkaz]
Zveřejněno 13.03.2019 13:37:42 | | | |
Před pár dny, když jsem dělal požadavek, jsem potřeboval vyčistit duplicitní záznamy v mysql, a tehdy bylo myšlenkou to napsat přes code traversal, a pak jsem si myslel, že je to příliš složité, protože jsem si myslel, že bych problém měl vyřešit SQL příkazem. Po ověření informací a konzultaci se šéfem jsem přišel s velmi pohodlným SQL příkazem, a zde se s ním podělím o SQL tvrzení a nápady.

Analýza potřeb
Pokud jsou v databázi duplicitní záznamy, jeden z nich smažte a ponechejte (ať už je kritériem pro určení duplicitních polí více polí)


řešení

Když tuto potřebu potkáte, pravděpodobně máte v srdci nějakou představu. Nejrychlejší věc, která mě napadla, byla, že bych to mohl vyřešit SQL příkazem, ale byl jsem příliš povrchní v složitých SQL příkazech, takže jsem chtěl požádat šéfa o pomoc.

Najděte někoho, kdo vám pomůže

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

Own Baidu

Našel jsem SQL příkaz:


Tento SQL nápad je jasný, existují následující 3 kroky:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAS count(*) > 1 Dotazujte na duplicitní záznamy v tabulce jako podmínku
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Druhou podmínkou je nejmenší hodnota ID v duplicitních záznamech v tabulce dotazů
  • Nakonec, podle výše uvedených dvou podmínek, smažte zbývající duplicitní záznamy kromě nejmenšího ID v duplicitním záznamu


Bohužel však při spuštění tohoto příkazu dochází k chybě, což zhruba znamená, že tabulka nemůže být aktualizována současně s dotazem.


Kód vyřešen

Na základě výše uvedeného SQL tvrzení si myslím, že můžete dosáhnout stejného cíle ve dvou krocích pomocí kódu:

  • Nejprve se odstraní duplicitní datové sady
  • Na základě dotazované datové sady jsou zbývající duplikáty odstraněny v cyklu


Měl jsem nápad a napsal jsem ho rychle, ale byl jsem šokovaný, když jsem ho pustil, a opravdu jsem ho potřeboval116svlevo a vpravo, a pak chci najít SQL příkaz, který mohu použít, vložit kód a běžící výsledek:




Perfektní [deduplikace a nechat jedno] SQL

Nakonec jsem dostal dokonalou odpověď v technické skupině, podívejte se na toto SQL tvrzení:


Výše uvedené tvrzení o sql, pokud se podíváte pozorně, není těžké pochopit myšlenku a pravděpodobně je rozděleno do 3 kroků, abyste to pochopili:

  • (SELECT min(id) id, user_id, monetary consume_time FROM consum_record GROUP PODLE user_id, monetary, consume_time HAVING count(*) > 1 ) t2 Dotazujte duplicitní záznamy a vytvořte kolekci (dočasná tabulka t2), která obsahuje minimální 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 Přidružená pole pro duplicitní kritéria
  • Mazat záznamy s ID většími než ID v T2 podle podmínek


Když jsem tu větu viděl, pomyslel jsem si, že je příliš silná. Tak jednoduché SQL příkaz dokáže vyřešit tak složitý problém a postoj se zvyšuje~
Je také velmi rychlý na provoz, původní spuštění kódové smyčky trvá asi 116 sekund, ale tady stačí 0,3 sekundy, úžasné~







Předchozí:javaEE video materiál z října 2018
Další:SQL náhodně mění aktualizovaná data
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com