SQL: trovare (ed eventualmente eliminare) i record duplicati

In questo articolo spiegherò come selezionare (e poi eventualmente eliminare) i record duplicati di una tabella, usando SQL 2005.

Può capitare che in una tabella ci siano dei record (righe) duplicati. Rintracciarli per poi eliminarli è sempre una faccenda noisa.

Per fare questo possiamo avvalerci della funzione di numerazione righe ROW_NUMBER() di MS SQL Server 2005.

Ad esempio, questa query:

SELECT  ROW_NUMBER() OVER(PARTITION BY PART_IVA ORDER BY CODICE) AS [RowNumber]
      , PART_IVA
      , CODICE
FROM  CLIENTI

elencherà tutti i Clienti, numerandoli progressivamente quando hanno la stessa Partita IVA ( … PARTITION BY PART_IVA … ).

Per evidenziare i duplicati, basterà aggiungere una WHERE, così

SELECT * FROM (
   SELECT  ROW_NUMBER() OVER(PARTITION BY PART_IVA ORDER BY CODICE) AS [RowNumber]
         , PART_IVA
         , CODICE
   FROM  CLIENTI
   ) AS T1
WHERE RowNumber>1

Similarmente, potremo usare lo stesso stratagemma per eliminare tutti i doppioni

 DELETE T1 FROM (
   SELECT  ROW_NUMBER() OVER(PARTITION BY PART_IVA ORDER BY CODICE) AS [RowNumber]
         , PART_IVA
         , CODICE
   FROM  CLIENTI
   ) AS T1
  WHERE T1.RowNumber >1

6 risposte a “SQL: trovare (ed eventualmente eliminare) i record duplicati”

  1. Interesting to know.

  2. Fantastisco articolo, fa esattamente quello che serve al caso mio!
    GRAZIE!
    🙂

  3. GRAZIE MILLE! Mi hai risparmiato un sacco di tempo! 🙂

  4. eccezionale davvero…
    proprio quello che serviva a me!! in un momento ho risolto quello che pensavo essere un bel pasticcio!

  5. articolo spettacolare!!!
    grazie davvero, è stato utilissimo!

  6. Complimenti x la chiarezza!

Replica