Molte volte sarà capitato a chi siluppa di dover eliminare da una tabella del nostro db le righe duplicate, ci sono tanti sistemi ma questo mi sembra rapido ed efficace.

Iniziamo col creare una tabella di esempio:
create table t1(col1 int, col2 int, col3 char(50))
insert into t1 values (1, 1, 'data value one')
insert into t1 values (1, 1, 'data value one')
insert into t1 values (1, 2, 'data value two')
Poi passiamo ad identificare i record righe hanno i valori di chiave primaria duplicati:
SELECT col1, col2, count(*)
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1
Innanzitutto determinare quanti insiemi di valori duplicati esistono e quanti duplicati ci sono per ogni set.
SELECT col1, col2, col3=count(*)
INTO holdkey
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1
Inserire le righe in una tabella temporanea eliminando i duplicati:
SELECT DISTINCT t1.*
INTO holddups
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2
Ora la seconda tabella dovrebbe avere l’indice univoco, se così non fosse eseguire il passaggio seguente di DELETE, altrimenti passare a quello successivo:
SELECT col1, col2, count(*)
FROM holddups
GROUP BY col1, col2
DELETE t1
FROM t1, holdkey
WHERE t1.col1 = holdkey.col1
AND t1.col2 = holdkey.col2
Ora effettuare una delete della tabella principale ed riinserire i record univoci così:
INSERT t1 SELECT * FROM holddups
Ecco fatto, ora avete la vostra tabella senza duplicati, è ora possibile cancellare le tabelle temporanee e di appoggio.
Hai trovato interessante questo post? Iscriviti al nostro Feed RSS per non perderti nemmeno un aggiornamento. Grazie per la visita... a presto!
Post che potrebbero interessarti:
Leave a reply