SQL - Eliminar registros duplicados

   
Vista:

Eliminar registros duplicados

Publicado por Cristian (30 intervenciones) el 18/03/2014 19:26:35
Hola a todos...

Como puedo hacer para eliminar registros duplicados de una base de datos. Son registros iguales excepto por el numero de ID.


Saludos y gracias
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
Imágen de perfil de xve

Eliminar registros duplicados

Publicado por xve (238 intervenciones) el 18/03/2014 22:48:12
Hola Cristian, revisa este hilo... http://www.lawebdelprogramador.com/foros/SQL/1411111-Eliminar_repetidos.html

Espero que te sirva...
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

Eliminar registros duplicados

Publicado por Cristian (30 intervenciones) el 18/03/2014 22:52:18
hola xve...

Ya lo revise y me da error... estoy intentando

Gracias por responder
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
Imágen de perfil de xve

Eliminar registros duplicados

Publicado por xve (238 intervenciones) el 19/03/2014 07:58:38
Nos puedes mostrar la instrucción SQL y el error que te produce?
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

Eliminar registros duplicados

Publicado por Jose luis (4 intervenciones) el 11/04/2014 22:32:50
Hola Cristian, espero te sirva

delete tu_tabla where id in(
select id
from tu_tabla
group by (a,b,c,d) having count(*)>1) -- a,b,c,d son los campos de la tabla que se repiten
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

Eliminar registros duplicados

Publicado por Cristian (30 intervenciones) el 12/04/2014 15:45:14
Hola Jose Luis... muchas gracias lo voy a probar
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

Eliminar registros duplicados

Publicado por Cristian (30 intervenciones) el 14/04/2014 02:24:32
Hola Jose Luis....
Te molesto porque trate de hacer lo que me indicaste de la siguiente forma:

delete pagos where id in(select id From pagos group by (dni,apenom,curso,division,modalidad,ncuota,mes,ano,monto,fechapago,usuario,archivo) having count(*)>1)

Pero me dice que falta un operador...

Donde puede estar el error ???

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

Eliminar registros duplicados

Publicado por Wellington (2 intervenciones) el 14/04/2014 03:03:53
La forma más eficaz (mejor que un trigger) es crear una constraint (unique key) sobre los campos que sean únicos.

Como alternativa puedes hacer que esta gente te deje los datos en una tabla temporal y no en la definitiva, y tu poner un procedimiento que haga un insert into tabla select distinct a,b,c,d from tutablatemporal..



espero que se entienda
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

Eliminar registros duplicados

Publicado por Cristian (30 intervenciones) el 14/04/2014 03:15:05
Hola Wellington..

La verdad no mucho
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

Eliminar registros duplicados

Publicado por Jose luis (4 intervenciones) el 14/04/2014 19:48:03
Para que te salga bien (luego optimizas ) te sugiero que la subconsulta la guardes en un temporal.

esto va en una temporal
select dni,apenom,curso,division,modalidad,ncuota,mes,ano,monto,fechapago,usuario,archivo
From pagos
group by (dni,apenom,curso,division,modalidad,ncuota,mes,ano,monto,fechapago,usuario,archivo)
having count(*)>1)


Luego haces el delete haciendo join contra la temporal.

también como se comento arriba podrías crear un índice no un trigger simplemente un índice, luego que hagas la depuración:


CREATE UNIQUE NONCLUSTERED index idx_xxxx on pagos(dni,apenom,curso,division,modalidad,ncuota,mes,ano,monto,fechapago,usuario,archivo) with IGNORE_DUP_KEY
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