Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 15984|Antwoord: 0

[Bron] MySQL [verwijder redundantie en laat er één over] Een SQL-instructie maakt de ideesamenvatting compleet

[Link kopiëren]
Geplaatst op 13-03-2019 13:37:42 | | | |
Een paar dagen geleden, toen ik een vereiste deed, moest ik de dubbele records in MySQL opschonen, en het idee was toen om het via codedoorloop te schrijven, maar toen vond ik het te ingewikkeld, omdat ik dacht dat ik het probleem met een SQL-instructie zou kunnen oplossen. Na het controleren van de informatie en overleg met de baas, kwam ik op een zeer handige SQL-instructie, en hier zal ik deze SQL-verklaring en ideeën delen.

Behoefteanalyse
Als er dubbele records in de database staan, verwijder en bewaar er één (ongeacht of de criteria voor het bepalen van dubbele velden meerdere velden zijn)


oplossing

Wanneer je deze behoefte tegenkomt, heb je waarschijnlijk een idee in je hart. Het snelste wat ik bedacht had, was dat ik het kon oplossen met een SQL-instructie, maar ik was te oppervlakkig in complexe SQL-instructies, dus wilde ik de baas om hulp vragen.

Zoek iemand om te helpen

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

Eigen Baidu

Ik vond een SQL-instructie:


Dit SQL-idee is duidelijk, er zijn de volgende 3 stappen:

  • SELECTEER peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Zoek duplicaatrecords in de tabel op als voorwaarde
  • SELECTEER min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 De tweede voorwaarde is de kleinste waarde van de ID in de dubbele records in de querytabel
  • Verwijder tenslotte volgens bovenstaande twee voorwaarden de resterende dubbele records behalve de kleinste ID in de dubbele record.


Maar helaas is er een fout bij het uitvoeren van deze instructie, wat ruwweg betekent dat de tabel niet tegelijk met de query kan worden bijgewerkt.


Code opgelost

Op basis van bovenstaande SQL-verklaring denk ik dat je hetzelfde doel in twee stappen via code kunt bereiken:

  • Dubbele datasets worden eerst verwijderd
  • Op basis van de geraadpleegde dataset worden de overgebleven duplicaten in een lus verwijderd


Ik had een idee en schreef het snel, maar ik was geschokt toen ik het publiceerde, en ik had het echt nodig116'slinks en rechts, en dan wil ik een SQL-instructie vinden die ik kan gebruiken, de code en het lopende resultaat plakken:




Perfecte [deduplicatie en laat er één achter] SQL

Uiteindelijk kreeg ik een perfect antwoord in een technische groep, kijk naar deze SQL-uitspraak:


De bovenstaande SQL-uitspraak, als je goed kijkt, is niet moeilijk om het idee te begrijpen, en het is waarschijnlijk verdeeld in 3 stappen om te begrijpen:

  • (SELECT min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, monetary, consume_time HAVING count(*) > 1 ) t2 Zoek de dubbele records op om een collectie te vormen (tijdelijke tabel t2), die de minimale ID van elk duplicaat record bevat
  • consum_record.user_id = t2.user_id en consum_record.monetary = t2.monetary en consum_record.consume_time = t2.consume_time Associate-velden voor de dubbele criteria
  • Verwijder records met ID's groter dan IDs in T2 volgens de voorwaarden


Toen ik deze zin zag, dacht ik bij mezelf dat dit te krachtig was. Zo'n eenvoudige SQL-instructie kan zo'n complex probleem oplossen, en de positie stijgt~
Het is ook supersnel om te draaien, de originele codeloop duurt ongeveer 116 seconden, maar hier is 0,3 seconden genoeg, geweldig~







Vorig:javaEE oktober 2018 videomateriaal
Volgend:SQL wijzigt willekeurig de bijgewerkte data
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com