Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

eliminar datos duplicados

Estas en el tema de eliminar datos duplicados en el foro de SQL Server en Foros del Web. Hola a todos mi problema es el siguiente: tengo la tabla usuarios la cual cuenta con los siguientes campos. nombres, apellidos, sexo, direccion, email, actividad. ...
  #1 (permalink)  
Antiguo 02/01/2007, 08:48
Avatar de franklin85  
Fecha de Ingreso: octubre-2006
Mensajes: 103
Antigüedad: 17 años, 6 meses
Puntos: 0
eliminar datos duplicados

Hola a todos mi problema es el siguiente:
tengo la tabla usuarios la cual cuenta con los siguientes campos.
nombres, apellidos, sexo, direccion, email, actividad.
El problema es que e realizado una consulta para ver si hay datos duplicados, la consulta la e realizado por email
Código PHP:
select emailcount(*)
from usuarios
group by email
having count
(*) > 
ahora lo que necesito es como hacer para eliminar los registros duplicados.
Por ejemplo si la consulta encuentra 1 emial el cual se esta duplicando 3 veces mas solo quedarme con el primero y el resto eliminarlos.
Ejemplo:
Juan, López, masculino, los laureles 124, [email protected], independiente

Carlos Juarez, masculino, los olivos 35, [email protected], dependiente (eliminado)
Mirian, femenino, surco 124, [email protected], independiente (eliminado)
Jose, Lozada, masculino, marañon 534, [email protected], independiente(eliminado)

El caso es buscar cual de los email se duplican y despues eliminar a los usuarios que estan duplicando el email. solo dejar un solo registro con un solo.
Gracias
  #2 (permalink)  
Antiguo 02/01/2007, 10:05
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: eliminar datos duplicados

Que tal Frank.

Una forma de hacerlo es usando una tabla temporal.

En la tabla temporal dejas por ejemplo, el email y nombre, y posteriormente con un segundo query obtienes el resto de los datos.
Código:
--1
select email,  MAX( Name + LastName) as NameFull
Into #tmpUsuarios
from usuarios 
--2
SELECT u.*
FROM usuarios u
   INNER JOIN  #tmpUsuarios t ON  u.email = t.email AND u.Name + u.LastName = t.NameFull
Por último borra tus registro de la tabla usuarios y mete los obtenidos en el query 2.

El código anterior funciona siempre y cuando la concatenación de Name + LastName sea único, sino cambialo por otro campo que te indique que sea único para cada grupo que tenga el mismo email.

Saludos y suerte!!
  #3 (permalink)  
Antiguo 04/01/2007, 14:03
Avatar de franklin85  
Fecha de Ingreso: octubre-2006
Mensajes: 103
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: eliminar datos duplicados

hola Daniel
en mi tabla tengo los siguientes campos:
apellido_paterno, apellido_materno, sexo, dia, mes, ano, estado_civil, d_identidad, direccion, distrito_provincia, telefono, celular, email, actividad.
Todos estos son mis campos, ahora lo que tu me estas diciendo es que haga lo siguiente:

Código PHP:
--1
select email
,  MAXName LastName) as NameFull
Into 
#tmpUsuarios
from usuarios 
--2
SELECT u
.*
FROM usuarios u
   INNER JOIN  
#tmpUsuarios t ON  u.email = t.email AND u.Name + u.LastName = t.NameFull 
Como puedo hacer para concatenar, mejor dicho que campo concateno, por que creo que tiene que ser un valor único de la tabla (o me equivoco).
Tengo que ver ya que la información guardada en la tabla es diferente ejemplo:
Juan Carlos, López, Mondragon, masculino, 15/febrero/1970, soltero, 15428015, los laureles 124, surco, 4251350, 97504510, [email protected], independiente

Juan, C, López, Mondragon, m, 15/02/1970, soltero, 15428015, los laureles #124, surco, 4251350, 97504510, [email protected], independiente


lo que deseo es que cuando se ejecute la consulta pase lo siguiente:
si encuentra el sgte email [email protected] en el registro #5 y depues el mismo email en el registro #23 el segundo email encontrado sea eliminado ya que solo lo que me va a importar es el correo.
Gracias.
  #4 (permalink)  
Antiguo 04/01/2007, 16:07
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 5 meses
Puntos: 8
Re: eliminar datos duplicados

Que tal Frank.

Aquí esta otra forma de solucionarlo:
Código:
--1. Primero pasamos todos los registros( todos los campos) a 
--una tabla temporal, agregando un campo del tipo identity

SELECT Identity(int,1,1) AS ID_tmp, 
   apellido_paterno, apellido_materno, sexo, dia, mes, ano, estado_civil,
   d_identidad, direccion, distrito_provincia, telefono, celular, email, actividad
Into #tmpUsuarios 
from usuarios  

--2. Agrupamos por email
select email,  MAX( ID_tmp ) as Id_tmp
Into #tmpUsuarios2 
from #tmpUsuarios 
Group By email

--3. Seleccionamos el resto de los campos de los registros, por email único.
SELECT 
u.apellido_paterno, u.apellido_materno, u.sexo, u.dia, u.mes, u.ano,
u.estado_civil, u.d_identidad, u.direccion, u.distrito_provincia, u.telefono, u.celular, u.email, u.actividad
FROM #tmpUsuarios u
   INNER JOIN  #tmpUsuarios2 t ON  u.Id_tmp= t.Id_tmp

DROP TABLE tmpUsuarios 
DROP TABLE #tmpUsuarios2
Prueba los querys anteriores y veráz que funciona!!!.

Saludos y suerte!
  #5 (permalink)  
Antiguo 23/12/2010, 17:39
 
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: eliminar datos duplicados

Cita:
Iniciado por franklin85 Ver Mensaje
Hola a todos mi problema es el siguiente:
tengo la tabla usuarios la cual cuenta con los siguientes campos.
nombres, apellidos, sexo, direccion, email, actividad.
El problema es que e realizado una consulta para ver si hay datos duplicados, la consulta la e realizado por email
Código PHP:
select emailcount(*)
from usuarios
group by email
having count
(*) > 
ahora lo que necesito es como hacer para eliminar los registros duplicados.
Por ejemplo si la consulta encuentra 1 emial el cual se esta duplicando 3 veces mas solo quedarme con el primero y el resto eliminarlos.
Ejemplo:
Juan, López, masculino, los laureles 124, [email][email protected][/email], independiente

Carlos Juarez, masculino, los olivos 35, [email][email protected][/email], dependiente (eliminado)
Mirian, femenino, surco 124, [email][email protected][/email], independiente (eliminado)
Jose, Lozada, masculino, marañon 534, [email][email protected][/email], independiente(eliminado)

El caso es buscar cual de los email se duplican y despues eliminar a los usuarios que estan duplicando el email. solo dejar un solo registro con un solo.
Gracias
  #6 (permalink)  
Antiguo 23/12/2010, 17:40
 
Fecha de Ingreso: diciembre-2010
Mensajes: 3
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: eliminar datos duplicados

Hay dos respuestas en el sitio siguiente:
http://international-dba.blogspot.com/2010/12/how-to-delete-duplicate-rows.html
  #7 (permalink)  
Antiguo 27/12/2010, 09:28
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: eliminar datos duplicados

No creo que tenga mucho sentido reabrir un tema que tiene casi 3 años de antigüedad.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #8 (permalink)  
Antiguo 27/12/2010, 09:37
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: eliminar datos duplicados

Y todavia no estamos a 28 de Diciembre, digo.......
__________________
MCTS Isaias Islas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:23.