Eliminar filas duplicadas de la tabla en Oracle
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?
Aceptado
Utilice la rowid
pseudocolumna.
DELETE FROM your_table
WHERE rowid not in
(SELECT MIN(rowid)
FROM your_table
GROUP BY column1, column2, column3);
Donde column1
, column2
y column3
constituyen la clave identificativa de cada registro. Puede enumerar todas sus columnas.
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)
DELETE FROM tablename a
WHERE a.ROWID > ANY (SELECT b.ROWID
FROM tablename b
WHERE a.fieldname = b.fieldname
AND a.fieldname2 = b.fieldname2)