Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 15984|Svar: 0

[Kilde] MySQL [fjern redundans og lad én være] En SQL-sætning fuldender idéresuméet

[Kopier link]
Opslået på 13/03/2019 13.37.42 | | | |
For et par dage siden, da jeg lavede et krav, skulle jeg rydde op i duplikatposterne i MySQL, og ideen dengang var at skrive det gennem kodegennemgang, og så tænkte jeg, at det var for kompliceret, fordi jeg tænkte, at jeg burde kunne løse problemet med en SQL-sætning. Efter at have tjekket informationen og rådført mig med chefen, kom jeg op med en meget praktisk SQL-sætning, og her vil jeg dele denne SQL-sætning og idéer.

Behovsanalyse
Hvis der er dubletter poster i databasen, slet og behold en af dem (uanset om kriterierne for at bestemme dubletfelter er flere felter)


opløsning

Når du møder dette behov, har du sandsynligvis en idé i hjertet. Det hurtigste, jeg kom i tanke om, var, at jeg kunne løse det med en SQL-sætning, men jeg var for overfladisk til komplekse SQL-sætninger, så jeg ville spørge chefen om hjælp.

Find nogen til at hjælpe

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

Egen Baidu

Fandt en SQL-sætning:


Denne SQL-idé er indlysende, der er følgende 3 trin:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Forespørg dublerede poster i tabellen som betingelse
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Den anden betingelse er den mindste værdi af ID'et i de dubletposter i forespørgselstabellen
  • Endelig, ifølge de to ovenstående betingelser, slet de resterende duplikatposter undtagen den mindste ID i duplikatposten


Men desværre er der en fejl i at køre denne sætning, hvilket omtrent betyder, at tabellen ikke kan opdateres samtidig med forespørgslen.


Kode løst

Baseret på ovenstående SQL-sætning tror jeg, at du måske kan opnå det samme mål i to trin gennem kode:

  • Duplikerede datasæt fjernes først
  • Baseret på det forespurgte datasæt fjernes de resterende dubletter i en løkke


Jeg havde en idé, og jeg skrev den hurtigt, men jeg blev chokeret, da jeg bragte den, og jeg havde faktisk brug for den116'erevenstre og højre, og så vil jeg finde en SQL-sætning, jeg kan bruge, indsætte koden og det løbende resultat:




Perfekt [deduplikering og efterlad én] SQL

Endelig fik jeg et perfekt svar i en teknisk gruppe, se på denne SQL-sætning:


Ovenstående SQL-sætning, hvis du kigger nøje, er det ikke svært at finde ud af idéen, og den er sandsynligvis opdelt i 3 trin for at forstå:

  • (SELECT min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, monetary, consume_time HAVING count(*) > 1 ) t2 Foresøg de dublette poster for at danne en samling (midlertidig tabel t2), som indeholder minimums-ID for hver duplikatpost
  • consum_record.user_id = t2.user_id og consum_record.monetary = t2.monetary og consum_record.consume_time = t2.consume_time Associate-felter for de dubblerede kriterier
  • Slet poster med ID'er større end ID'er i T2 i henhold til betingelserne


Da jeg så denne sætning, tænkte jeg, at det var for stærkt. En så simpel SQL-sætning kan løse et så komplekst problem, og holdningen stiger~
Det er også super hurtigt at køre, den oprindelige kodeloop-udførelse tager omkring 116 sekunder, men her er 0,3 sekunder nok, fantastisk~







Tidligere:javaEE oktober 2018 videomateriale
Næste:SQL ændrer tilfældigt de opdaterede data
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com