Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 15984|Svare: 0

[Kilde] MySQL [fjern redundans og la én være igjen] En SQL-setning fullfører idéoppsummeringen

[Kopier lenke]
Publisert på 13.03.2019 13:37:42 | | | |
For noen dager siden, da jeg jobbet med et krav, måtte jeg rydde opp i duplikatpostene i MySQL, og ideen da var å skrive det gjennom kodetraversering, og så syntes jeg det var for komplisert, og tenkte at jeg burde kunne løse problemet med en SQL-setning. Etter å ha sjekket informasjonen og rådført meg med sjefen, kom jeg opp med en veldig praktisk SQL-setning, og her vil jeg dele denne SQL-setningen og ideene.

Behovsanalyse
Hvis det finnes dupliserte poster i databasen, slett og behold én av dem (enten kriteriene for å avgjøre dupliserte felt er flere felt)


løsning

Når du møter dette behovet, har du sannsynligvis en idé i hjertet. Det raskeste jeg tenkte på var at jeg kunne løse det med en SQL-setning, men jeg var for overfladisk på komplekse SQL-setninger, så jeg ville spørre sjefen om hjelp.

Finn noen som kan hjelpe

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

Egen Baidu

Fant en SQL-setning:


Denne SQL-ideen er åpenbar, det er følgende 3 steg:

  • VELG peopleId, seq FRA vitae GROUP BY peopleId, seq HAR telling(*) > 1 Søk i duplikatposter i tabellen som en betingelse
  • VELG min(rowid) FRA vitae GROUP BY peopleId, seq HAR telle(*) > 1 Den andre betingelsen er den minste verdien av ID-en i de dupliserte postene i spørringstabellen
  • Til slutt, i henhold til de to ovennevnte betingelsene, slett de gjenværende duplikatpostene unntatt den minste ID-en i duplikatposten


Men dessverre oppstår det en feil i å kjøre denne setningen, noe som omtrent betyr at tabellen ikke kan oppdateres samtidig som spørringen.


Kode løst

Basert på SQL-setningen ovenfor tror jeg at du kan oppnå det samme målet i to steg gjennom kode:

  • Dupliserte datasett fjernes først
  • Basert på det forespurte datasettet fjernes de gjenværende duplikatene i en løkke


Jeg hadde en idé, og jeg skrev den raskt, men jeg ble sjokkert da jeg publiserte den, og jeg trengte den faktisk116-erevenstre og høyre, og så vil jeg finne en SQL-setning jeg kan bruke, lime inn koden og det løpende resultatet:




Perfekt [deduplisering og la en] SQL

Til slutt fikk jeg et perfekt svar i en teknisk gruppe, se på denne SQL-setningen:


Ovenstående SQL-setning, hvis du ser nøye etter, er det ikke vanskelig å finne ut av ideen, og den er sannsynligvis delt inn i 3 steg for å forstå:

  • (SELECT min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, monetary, consume_time HAVING count(*) > 1 ) t2 Spør de dupliserte postene for å danne en samling (midlertidig tabell t2), som inneholder 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 Assosierte felt for duplikatkriteriene
  • Slett poster med ID-er større enn ID-er i T2 i henhold til betingelsene


Da jeg så denne setningen, tenkte jeg for meg selv at den var for kraftfull. En så enkel SQL-setning kan løse et så komplekst problem, og holdningen øker~
Det er også superraskt å kjøre, den opprinnelige kodeloop-kjøringen tar omtrent 116 sekunder, men her er 0,3 sekunder nok, fantastisk~







Foregående:javaEE oktober 2018 videomateriale
Neste:SQL endrer tilfeldig de oppdaterte dataene
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com