Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 15984|Risposta: 0

[Fonte] MySQL [rimuovi la ridondanza e lasciane uno] Un'istruzione sql completa il riassunto dell'idea

[Copiato link]
Pubblicato su 13/03/2019 13:37:42 | | | |
Qualche giorno fa, mentre stavo facendo un requisito, dovevo pulire i record duplicati in mysql, e l'idea in quel momento era di scriverli tramite code traversal, poi ho pensato fosse troppo complicato, pensando che avrei dovuto risolvere il problema con un'istruzione sql. Dopo aver verificato le informazioni e consultato il capo, ho trovato una dichiarazione SQL molto comoda, e qui condividerò questa dichiarazione SQL e le idee.

Analisi dei bisogni
Se ci sono record duplicati nel database, eliminarne e conservarne uno (indipendentemente dal fatto che i criteri per determinare i campi duplicati siano più campi)


soluzione

Quando incontri questo bisogno, probabilmente hai un'idea nel cuore. La cosa più veloce che mi è venuta in mente è che potevo risolverlo con un'istruzione SQL, ma ero troppo superficiale con istruzioni SQL complesse, quindi volevo chiedere aiuto al capo.

Trova qualcuno che ti aiuti

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

Own Baidu

Ho trovato un'istruzione SQL:


Questa idea SQL è ovvia, ci sono i seguenti 3 passaggi:

  • SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 Consulta i record duplicati nella tabella come condizione
  • SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 La seconda condizione è il valore più piccolo dell'ID nei record duplicati nella tabella di query
  • Infine, secondo le due condizioni sopra, si eliminano i record duplicati rimanenti tranne il più piccolo ID nel record duplicato


Ma purtroppo, c'è un errore nell'esecuzione di questa istruzione, il che significa approssimativamente che la tabella non può essere aggiornata contemporaneamente alla query.


Codice risolto

Basandomi sulla dichiarazione SQL sopra, penso che tu possa raggiungere lo stesso obiettivo in due passaggi tramite codice:

  • I dataset duplicati vengono prelevati per primi
  • In base al dataset interrogato, i duplicati rimanenti vengono rimossi in un ciclo


Avevo un'idea, e l'ho scritta in fretta, ma sono rimasto scioccato quando l'ho proposta, e ne avevo davvero bisogno116a sinistra e a destra, e poi voglio trovare un'istruzione SQL che possa usare, incollare il codice e il risultato in esecuzione:




SQL perfetto [deduplicazione e lascia uno]

Infine, ho ottenuto una risposta perfetta in un gruppo tecnico, guarda questa affermazione sql:


La dichiarazione SQL sopra, se guardi attentamente, non è difficile capire l'idea, e probabilmente è divisa in 3 passaggi per essere compresa:

  • (SELEZIONA min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, monetary, consume_time HAVING count(*) > 1 ) t2 Consulta i record duplicati per formare una collezione (tabella temporanea t2), che contiene l'ID minimo di ogni record duplicato
  • consum_record.user_id = t2.user_id e consum_record.monetario = t2.monetario e consum_record.consume_time = t2.consume_time campi Associate per i criteri duplicati
  • Elimina i record con ID maggiori degli ID in T2 secondo le condizioni


Quando ho visto questa frase, ho pensato che fosse troppo potente. Un'affermazione sql così semplice può risolvere un problema così complesso, e la postura è in aumento~
È anche molto veloce da eseguire, l'esecuzione originale del codice loop richiede circa 116s, ma qui 0,3s basta, incredibile~







Precedente:Materiale video di javaEE ottobre 2018
Prossimo:SQL modifica casualmente i dati aggiornati
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com