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 de tinodba
1
1
tinodba, Trabajo como DBA Oracle desde 1999 en una importante empresa
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-------
- Anónimoahora mismo
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.