back to top

Trovare record duplicati in MySQL (ed eliminare i doppioni)

La ridondanza non ha sempre effetti negativi in informatica, in alcuni casi infatti essa viene utilizzata per aumentare l’affidabilità di un’applicazione tramite l’esecuzione di processi in parallelo, ma quando si parla di DBMS i record duplicati possono essere anche un problema, soprattutto quando ci si trova a gestire dei database di grandi dimensioni.

Trovare i record duplicati

Non è necessario farsi prendere dal panico davanti a fenomeni di ridondanza, pochi record duplicati non sono in grado di influire negativamente sulle prestazioni generali di un Database Manager; per avere un’idea corretta della presenza (o meno) di dati duplicati in una tabella MySQL è possibile utilizzare una semplice interrogazione, come nell’esempio seguente:

SELECT email, count(email) AS totale
FROM newsletter
GROUP BY email
HAVING totale > 1
ORDER BY totale;

HAVING è una clausola che viene applicata sui record della tabella risultante da una query GROUP BY, nel caso specifico la clausola permette di visualizzare i record per i quali il conteggio delle ricorrenze è superiore ad "1" e quindi corrispondente ad un record duplicato.

Cancellare i record duplicati

Esistono diversi modi per effettuare la pulizia automatica di una tabella dai risultati duplicati, uno dei più semplici ed efficaci consiste nel creare una nuova tabella, identica alla prima, con un indice univoco per il campo (o i campi) per i quali si vuole evitare che vi siano valori duplicati. Ecco le query SQL:

CREATE TABLE tmp LIKE mia_tabella;
ALTER TABLE tmp ADD UNIQUE (campo1);

fatto questo andremo a riversare nella nuova tabella i dati presenti nella tabella originale che si desidera "pulire", in questo modo:

INSERT INTO tmp SELECT * FROM mia_tabella;

Ora non resta che rinominare la tabella originale e quella temporanea, quest’ultima prenderà il nome di quella originale cha andrà a sostituire:

RENAME TABLE mia_tabella TO cancellami, tmp TO mia_tabella;

Alla fine, dopo gli opportuni controlli e verifiche, si potrà cancellare la tabella originale:

DROP TABLE cancellami;

Nota: nell’esempio abbiamo previsto un indice univoco composto da un solo campo, ma nulla vieta di creare un indice su più campi:

ALTER TABLE tmp ADD UNIQUE (campo1,campo2,...);
Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.

Leggi anche...

Come ottenere l’ID dell’ultimo record inserito in MySQL, PostgreSQL, SQL Server e Oracle?

Ottenere l'ID dell'ultimo record inserito in una tabella, dopo...

Database completo regioni, province e comuni italiani (in formato SQL)

Quando si sviluppa un sito web o un'applicazione in...

File CSV: cosa sono, come si aprono e come crearli

In questo articolo cercheremo di capire cos'รจ il formato...

Confrontare due tabelle e trovare i record senza corrispondenza

all'interno di un database relazionale può essere utile poter...

Eseguire comandi SQL online con SQL Fiddle

Sì. E' possibile testare codice SQL senza aver installato...

SQL: Calcolare la media dei valori di più campi

Attraverso una semplice query SQL è possibile calcolare dinamicamente...
Pubblicitร