Tengo una pregunta al respecto para poder ayudarte.
Deseas eliminar todos los registros que se repiten, es decir, si un registro se repite dos veces, entonces, se eliminarán esos dos registros, o deseas que permanezca una instancia del registro, y que se eliminen sus duplicados????
DECLARE @col1 SMALLINT, @col2 INT, @dupcnt INT
declare dups cursor for
SELECT MyCol1, MyCol2, (count(*) - 1) as Duplicates
FROM MyTabla
GROUP BY MyCol1, Mycol2
HAVING count(*) > 1 order by MyCol1, MyCol2
-- Abro mi cursor
OPEN dups
-- Entro al ciclo
WHILE(1=1)
BEGIN
FETCH NEXT FROM dups INTO @col1, @col2, @dupcnt
IF (@@fetch_status < 0)
BREAK -- Rompo el Ciclo
SET rowcount @dupcnt
DELETE MyTabla WHERE MyCol1 = @col1 and MyCol2 = @col2
END
-- Quito mi cursor de la memoria
DEALLOCATE dups
hola alguien me podria decir como hago este estor procedure en oracle ..... pq no se que hacer a la hora del delete me borre solo los duplicados , pero se quede con uno gracias
Hola Mery,
La solución que Isaías posteó el 18/09/2003 es válida cuando haya uno o más repetidos, y aunque no sé si Oracle te acepta el UNION, te paso un ejemplo con datos:
no puedo hacer esto porque la tabla tiene PK y lo que se me repite son el resto de campos como si hubiera hecho una doble carga ......... pero en si el SP en SQL borra todos los repetidos , es decir me voy a quedar sin los repetidos , tendria que sacarle un Backup de estos para recuperarlos despues...gracias
Liliana Gracias por tu ayuda ....entonces con este select yo podria sacar el menor de los que se repiten , guadarlo aparte en una tabla , hacer el procedimiento para eliminar estos duplicados y despues hacer un insert de lo backapeado... gracias por todo
Afortunadamente en Oracle no se necesitan emplear metodos tan rebuscados, complicados e ineficientes como los que han propuesto.
Con UN SOLO DELETE se eliminan las tuplas repetidas:
SQL> select * from t;
C D
---------- ----------
1 1
2 1
3 2
4 2
SQL> delete from t
2 where rowid not in (select min(rowid)
3 from t
4 group by d);
2 rows deleted.
SQL> select * from t;
C D
---------- ----------
1 1
3 2
SQL>
Saludos.
Valora esta respuesta
0
Comentar
RE:Quitar registros repetidos en oracle
Publicado por Master (1 intervención) el 08/04/2013 18:00:48
estimado Trazom . esto se usa en SQL server 2008 R2, Oracle no lo es todo.
y este foro es para soluciones
si no puedes aportar algo valioso FAVOR DE NO ENTORPECER las consultas que si son importantes
DELETE FROM TBL_PRUEBA WHERE seriales in(
SELECT seriales FROM tbl_prueba
GROUP BY seriales
HAVING COUNT(*) > 1)and Cotizado='0'