back to top

Trovare record duplicati in MySQL (ed eliminare i doppioni)

La ridondanza non ha sempre effetti negativi in informatica; in alcuni casi, essa viene utilizzata per aumentare lโ€™affidabilitร  di unโ€™applicazione tramite lโ€™esecuzione di processi in parallelo. Tuttavia, quando si parla di DBMS, i record duplicati possono rivelarsi problematici, soprattutto nella gestione di database di grandi dimensioni, dove la pulizia dei dati diventa essenziale.

Trovare i record duplicati

Non รจ necessario farsi prendere dal panico di fronte a fenomeni di ridondanza; pochi record duplicati non influenzeranno negativamente le prestazioni generali di un Database Manager. Per avere una visione chiara sulla presenza (o meno) di dati duplicati in una tabella MySQL, รจ possibile utilizzare una semplice interrogazione, come nellโ€™esempio seguente:

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

La clausola HAVING viene applicata sui record della tabella risultante da una query GROUP BY. Nel caso specifico, questa clausola consente di visualizzare i record per i quali il conteggio delle ricorrenze รจ superiore a โ€œ1โ€, indicante dunque un record duplicato. รˆ importante notare che identificare i duplicati รจ solo il primo passo; la pulizia dei dati รจ essenziale per mantenere lโ€™integritร  del database.

Esempio di output

Il risultato della query restituirร  una tabella con le email e il numero di volte in cui ciascuna appare. Questo ci permette di identificare rapidamente i duplicati. Ecco un esempio di output che potremmo aspettarci dalla quei vista sopra:

emailtotale
prova@email.com3
esempio@email.com2
test@email.com2

Cancellare i record duplicati

Esistono diversi metodi 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 necessarie per questa operazione:

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

Fatto ciรฒ, possiamo riversare nella nuova tabella i dati presenti nella tabella originale che desideriamo โ€œpulireโ€. La query per effettuare questo รจ la seguente:

INSERT INTO tmp SELECT * FROM mia_tabella;

Ora non ci resta che rinominare la tabella originale e quella temporanea, facendo in modo che questโ€™ultima prenda il nome di quella originale che andrร  a sostituire. La query per questo passaggio รจ:

RENAME TABLE mia_tabella TO cancellami, tmp TO mia_tabella;

Alla fine, dopo aver effettuato i necessari controlli e verifiche, potremo cancellare la tabella originale con la seguente query:

DROP TABLE cancellami;

Nota: nellโ€™esempio abbiamo previsto un indice univoco composto da un solo campo, ma รจ possibile creare un indice su piรน campi se la situazione lo richiede. Ad esempio, la query per aggiungere un indice su piรน colonne รจ:

ALTER TABLE tmp ADD UNIQUE (campo1, campo2);

In conclusione, identificare ed eliminare i record duplicati รจ una pratica fondamentale per mantenere lโ€™integritร  e le prestazioni del database. Utilizzando le query fornite, รจ possibile gestire facilmente i dati ridondanti e garantire una struttura piรน efficiente del database, contribuendo cosรฌ a unโ€™applicazione piรน performante e sicura.

Altri contenuti interessanti

Pubblicitร 

Potrebbero interessarti queste guide

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ร