Eliminar filas duplicadas de la tabla en Oracle

Resuelto juan asked hace 15 años • 24 respuestas

Estoy probando algo en Oracle y completé una tabla con algunos datos de muestra, pero en el proceso cargué accidentalmente registros duplicados, por lo que ahora no puedo crear una clave principal usando algunas de las columnas.

¿Cómo puedo eliminar todas las filas duplicadas y dejar solo una de ellas?

juan avatar Feb 10 '09 00:02 juan
Aceptado

Utilice la rowidpseudocolumna.

DELETE FROM your_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM your_table
GROUP BY column1, column2, column3);

Donde column1, column2y column3constituyen la clave identificativa de cada registro. Puede enumerar todas sus columnas.

Bill the Lizard avatar Feb 09 '2009 17:02 Bill the Lizard

De Pregúntale a Tom

delete from t
 where rowid IN ( select rid
                    from (select rowid rid, 
                                 row_number() over (partition by 
                         companyid, agentid, class , status, terminationdate
                                   order by rowid) rn
                            from t)
                   where rn <> 1);

(se corrigió el paréntesis que faltaba)

Dead Programmer avatar Mar 18 '2011 06:03 Dead Programmer
DELETE FROM tablename a
      WHERE a.ROWID > ANY (SELECT b.ROWID
                             FROM tablename b
                            WHERE a.fieldname = b.fieldname
                              AND a.fieldname2 = b.fieldname2)
 avatar Nov 09 '2009 06:11