Eliminar repetidos

Hola, tengo una tabla con filas enteras repetidas. Es así porque el que la creo que su momento la creo sin clave y la cargo mal. Así que tengo una tabla en la que cada registro esta dos, tres o cuatro veces. ¿Cuál es la mejor manera de arreglar esto?

1 respuesta

Respuesta
1
Te mando un script SQL de Oracle que uso cuando quiero borrar los registros repetidos. En tu caso, debes indicar el nombre de la tabla y todos los campos de la tabla separadas con comas (',').
Si tienes alguna duda sobre el script ya sabes donde encontrarme.
Un saludo,
Tinoco DBA.
PD: Cuidado al copiar-pegar por si alguna línea quedase cortada mal.
---->8------->8--------->8-------
REM ***************************************************************
REM Este script borra filas repetidas en una tabla
REM Autor: Tinoco_DBA
REM Todoexpertos.com->Categoria ORACLE, LENGUAGE SQL, UNIX
REM ***************************************************************
REM
set echo off
set lines 200
set pages 50
set verify off heading off
undefine t
undefine c
prompt
prompt
prompt Introduce el nombre de la tabla que tiene filas repetidas
prompt
accept t prompt 'Tabla?: '
prompt
select 'Campos de la tabla '||upper('&&t') from dual;
describe &&t
prompt
prompt Introduce ahora las columnas que deberian ser unicas. Si son mas de una SEPARALAS con comas.
prompt Por ejemplo, si el error es que no habia PK asociada y quieres eliminar todo un registro,
prompt debes indicar todas las columnas de la tabla. NO OLVIDES LAS COMAS de separacion.
prompt
accept c prompt 'Columna(s): '
prompt
prompt *********************************************
set heading on
prompt Contenido de los DUPLICADOS ANTES del cambio:
spool dupli_antes.log
select * from &&t;
spool off
prompt
prompt Eliminando filas duplicadas....
prompt
delete from &&t
where rowid not in (select min(rowid) from &&t group by &&c)
/
prompt **********************************************
prompt Contenido de los DUPLICADOS DESPUES del cambio
spool dupli_despues.log
select * from &&t;
spool off
prompt
prompt ************************************************************************************************
prompt Ahora debes comprobar si se han eliminado correctamente todas las filas repetidas.
prompt Para eso puedes comparar los dos ficheros generados (dupli_antes.log y dupli_despues.log).
prompt Si todo es correcto, puedes hacer commit para aceptar los cambios. CUIDADO! Si sales de sqlplus
prompt se hara commit automaticamente.
prompt
---->8------->8--------->8-------

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas