SQL - Quitar registros repetidos

 
Vista:

Quitar registros repetidos

Publicado por Hernan* (104 intervenciones) el 18/09/2003 21:42:33
Como logro eso sin modificar la tabla, solo quiero una sentencia que borre los que se repiten
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Quitar registros repetidos

Publicado por Jerry (15 intervenciones) el 18/09/2003 22:09:54
Que tal!!!

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????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quitar registros repetidos

Publicado por Isaías Islas (5072 intervenciones) el 18/09/2003 23:44:19
Puede intentar algo asi:

SELECT * FROM SuTabla
UNION
SELECT * FROM SuTabla

El resultado que le de, son los registros UNICOS, seria tan sencillo de insertarlos en una nueva tabla y posteriormente eliminar "SuTabla".

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quitar registros repetidos

Publicado por Hernan* (104 intervenciones) el 19/09/2003 14:35:25
Quiero eliminar solo los duplicados. Si de un mismo registro tengo 3, entonces borro 2 y me queda el registro como unico.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quitar registros repetidos

Publicado por Isaías Islas (5072 intervenciones) el 19/09/2003 17:38:48
Ok, esta solución ya la probe y funciona:

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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quitar registros repetidos en oracle

Publicado por Mery (6 intervenciones) el 27/07/2005 18:00:53
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Quitar registros repetidos en oracle

Publicado por Liliana (426 intervenciones) el 28/07/2005 17:32:39
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:

create table #test (nro smallint)
insert #test select 1
insert #test select 2
insert #test select 2
insert #test select 3
insert #test select 3
insert #test select 3
insert #test select 4
insert #test select 4
insert #test select 4
insert #test select 4

select * from #test
union
select * from #test

Resultado:
nro
------
1
2
3
4

Saludos, Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quitar registros repetidos en oracle

Publicado por Mery (6 intervenciones) el 01/08/2005 16:35:54
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Quitar registros repetidos en oracle

Publicado por Liliana (426 intervenciones) el 01/08/2005 18:50:43
Mery,
Lo que yo te mandé elimina FILA COMPLETA repetida, y no es tu caso.
Por lo que entiendo, tenés algo como esto:

Clave Nombre
1 Mery
2 Mery

¿Con cuál de ellos tendrías que quedarte?
Si fuese con la clave menor, entonces sería:

SELECT Clave = MIN(clave), Nombre
FROM tabla
GROUP BY Nombre
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quitar registros repetidos en oracle

Publicado por Mery (6 intervenciones) el 01/08/2005 21:21:45
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
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Quitar registros repetidos en oracle

Publicado por trazom (8 intervenciones) el 15/08/2005 14:11:39
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
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
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'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar