Eliminacion de filas con ROWID en oracle

Quisiera saber como eliminar filas repetidas dentro de oracle usando el ROWID pero sin que se elimine una para que quede como original y referencia de la base de datos, o por lo menos la busqueda de registros repetidos...

1 respuesta

Respuesta
1
Anteres25, si lo quieres hacer por ROWID, puedes hacerlo asi:
Table: EMP
Empno number
Ename varchar2(20)
JOB VARCHAR2(20)
DELETE FROM EMP E
WHERE E.ROWID > ANY (SELECT ROWID
FROM EMP M
WHERE M.EMPNO = E.EMPNO
AND M.ENAME = E.ENAME
AND M.JOB = E.JOB )
Otra opcion sin hacerlo por ROWID es:
delete from tabla
where campo not in (select distinct campo from table)
Estoy a tu disposicion por cualquier duda o consulta.
Anteres25, en la respuesta anterior no se copio el texto donde te muestro como hacerlo por ROWID, te lo pego aqui, aunque la solucion que te pase arriba tambien es valida.
DELETE from table_name a
where a.rowid > ANY (
                            Select b.rowid from table_name b where a.col1 =b.col1 and a.col2 = b.col2);
Anteres25, por si no quedo clara la explicacion, te paso un ejemplo del query para borrar por ROWID.
Para mi tabla [size= x-small]ARITMETICA_SOFTWARE, tengo 3 columnas, la que nos interesa es CONTACTO, en dicha tabla tengo 8  registros donde el campo CONTACTO no se repite, lo que hice es insertar otros 8 registros para duplicar las filas, quedandome 8 filas y otras 8 filas iguales, total 16 filas.[/size]
[size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">[color=#0000ff]<font size="2" color="#0000ff"> 
[/color]</font>[/size][color=#0000ff] 
[/color]</span> 
[size= x-small; color: #0000ff][/size][size= x-small; color: #0000ff][/size]
[size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">[color=#0000ff]<font size="2" color="#0000ff">insert into
[/color]</font>
[/size][color=#0000ff] 
[/color]
</span>
[size= x-small][color=#ff0000]commit;[/color][/size]
[size= x-small]ARITMETICA_SOFTWARE [/size][size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">([/size]</span>[size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">select [/size]</span>[size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">* [/size]</span>[size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">from [/size]</span>[size= x-small]ARITMETICA_SOFTWARE[/size][size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">);[/size]</span>
8 row(s) inserted
[size= x-small]El query a ejecutar para limpiar los registros duplicados buscando por CONTACTO (para que sean unicos), es:[/size]
[size= x-small]<span style="font-size: x-small; color: #0000ff;"><span style="font-size: x-small; color: #0000ff;">[color=#0000ff]<font size="2" color="#0000ff">DELETE from
[/color]</font>
[/size][color=#0000ff] 
[/color]
</span> 
[size= x-small]ARITMETICA_SOFTWARE a [/size][size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">[color=#0000ff]<font size="2" color="#0000ff">where
[/color]</font>
[/size][color=#0000ff] 
[/color]
</span> 
[size= x-small]a[/size][size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">.[/size]</span>[size= x-small; color: #800080]<span style="font-size: x-small; color: #800080;">rowid [/size]</span>[size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">> [/size]</span>[size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">ANY [/size]</span>[size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">( [/size]</span>[size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">[color=#0000ff]<font size="2" color="#0000ff">Select
[/color]</font>
[/size][color=#0000ff] 
[/color]
</span> 
[size= x-small]b[/size][size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">.[/size]</span>[size= x-small; color: #800080]<span style="font-size: x-small; color: #800080;">rowid [/size]</span>[size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">from [/size]</span>[size= x-small]ARITMETICA_SOFTWARE b [/size][size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">[color=#0000ff]<font size="2" color="#0000ff">where
[/color]</font>
[/size][color=#0000ff] 
[/color]
</span> 
[size= x-small]a[/size][size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">.[/size]</span>[size= x-small]CONTACTO [/size][size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">=[/size]</span>[size= x-small]b[/size][size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">.[/size]</span>[size= x-small]CONTACTO[/size][size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">); [/size]</span>[size= x-small; color: #0000ff]<span style="font-size: x-small; color: #0000ff;">[color=#0000ff]<font size="2" color="#0000ff">commit
[/color]</font>
[/size][color=#0000ff] 
[/color]
</span> 
[size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">;[/size]</span>[size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">Processing ...
DELETE from ARITMETICA_SOFTWARE a
where a.rowid > ANY (
Select b.rowid from ARITMETICA_SOFTWARE b
where a.CONTACTO =b.CONTACTO)[/size]</span>
[size= x-small; color: #ff0000]<span style="font-size: x-small; color: #ff0000;">8 row(s) deleted[/size]</span>
[size= x-small; color: #ff0000][/size]
</span>Cualquier duda, estoy a tu disposicion,
Saludos y exitos.
[size= x-small]<span style="font-size: x-small; color: #ff0000;">[/size]
</span>
Anteres25, te pido disculpas por tener que sumarme tantas veces a la respuesta, la verdad es que todavia no puedo entender que en las respuestas no permita hacer copy paste... pero bueno, vamos de vuelta y espero poder despejar tu duda que es lo importante.
Para mi tabla ARITMETICA_SOFTWARE duplique los registros, para esto hice:
insert into ARITMETICA_SOFTWARE (select * from ARITMETICA_SOFTWARE);
commit;
Una de mis columnas es CONTACTO y esta es la que voy a usar para diferenciar los registros duplicados:
DELETE from ARITMETICA_SOFTWARE a
where a.rowid > ANY (
select b.rowid from ARITMETICA_SOFTWARE b
where a.CONTACTO = b.CONTACTO);
commit;

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas