Foros del Web » Programación para mayores de 30 ;) » .NET »

Eliminar filas con correo repetido

Estas en el tema de Eliminar filas con correo repetido en el foro de .NET en Foros del Web. Holas Tengo una tabla de 5 columnas en SQLSERVER 2005, una de las columnas se llama Email. Quisiera eliminar las filas que tengan correo repetido. ...
  #1 (permalink)  
Antiguo 04/11/2011, 14:07
Avatar de kharen  
Fecha de Ingreso: septiembre-2009
Mensajes: 75
Antigüedad: 14 años, 7 meses
Puntos: 2
Eliminar filas con correo repetido

Holas

Tengo una tabla de 5 columnas en SQLSERVER 2005, una de las columnas se llama Email. Quisiera eliminar las filas que tengan correo repetido. Traté de usar :

Select distinct Email, col2, col3, col4 from Tabla1 pero Distinct valida toda la fila. Quisiera que valide sólo el campo Email, y que me muestre todas las columnas.
Pensaba copiar ese resultado de select a otra tabla2.

ayuda porfis
  #2 (permalink)  
Antiguo 04/11/2011, 14:12
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Eliminar filas con correo repetido

Hola kharen has usado la claúsula group by TUCOLUMNA ?. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net

Última edición por Aquaventus; 04/11/2011 a las 14:28
  #3 (permalink)  
Antiguo 04/11/2011, 16:59
Avatar de kharen  
Fecha de Ingreso: septiembre-2009
Mensajes: 75
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Eliminar filas con correo repetido

Hola Aquaventus

si he usado:

Select nombre, empresa, tipo, país, email, count(*)
From correos
Group by nombre, empresa, tipo, país, email
Having count(*) = 1


pero no me devuelve la misma cantidad de filas como:

select distinct email from correos
  #4 (permalink)  
Antiguo 05/11/2011, 07:52
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Eliminar filas con correo repetido

quieres eliminar los repetidos o que se visualizen en tu consulta 1 vez nada mas por cada email?
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #5 (permalink)  
Antiguo 05/11/2011, 11:19
 
Fecha de Ingreso: octubre-2011
Mensajes: 114
Antigüedad: 12 años, 6 meses
Puntos: 14
Respuesta: Eliminar filas con correo repetido

Te recomiendo lo que dice Aquaventus, primero agrúpalos por email y con la instruccion Having count(*)>1 (adaptada a tu query) pasale el parametro a un delete y eliminalos asi ;)
  #6 (permalink)  
Antiguo 06/11/2011, 00:16
Avatar de kharen  
Fecha de Ingreso: septiembre-2009
Mensajes: 75
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Eliminar filas con correo repetido

Holas, gracias por su ayuda Aquaventus y AndyDroid.

En realidad lo que quiero es eliminar los correos repetidos. Por ejemplo: si en mi tabla hay un correo que se repite 10 veces, debería eliminar los 9 correos y dejar un único correo. He estado probando los select con la clausula group by:

select count(*), email from email
group by email
having count(*)>1

sí me devuelve los correos que se repiten más de una vez, pero no tengo idea de cómo pasarle como parámetro a una instruccion DELETE. Es decir, cómo hacer que se elimine sólo los correos repetidos dejando un único correo sin eliminar.



He estado indagando, y me dijeron que podría utilizar Cursores o la instruccion Merge. Quizás ustedes tienen conocimiento sobre estas funciones?

Gracias
  #7 (permalink)  
Antiguo 06/11/2011, 00:37
 
Fecha de Ingreso: octubre-2011
Mensajes: 114
Antigüedad: 12 años, 6 meses
Puntos: 14
Respuesta: Eliminar filas con correo repetido

es sencillo, solo aclararemos lo siguiente, mencionas que solo quieres eliminar los correos repetidos, hablando asi implica todo el registro o solamente el campo?

si es para todo el registro utiliza algo asi como lo siguiente

delete from NombreTabla Where identificadorDeRegistro IN ( InstruccionSELECT )

mira esto como te lo planteo te va eliminar por cada vez que lo ejecutes solo 1 email repetido de cada agrupación, te recomiendo le agregues in ciclo para que se ejecute solo (y no lo hagas tu manualmente)

tu tienes este codigo

select count(*), email from email
group by email
having count(*)>1

dejalo algo asi

select Max(identificadorDeRegistro)
group by email
having count(*)>1


y esta instruccion es la que le colocaras al delete en los parentesis


Sobre los cursores o Merge yo no lo he utilizado
  #8 (permalink)  
Antiguo 06/11/2011, 11:07
Avatar de kharen  
Fecha de Ingreso: septiembre-2009
Mensajes: 75
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Eliminar filas con correo repetido

Hola AndyDroid.

Gracias por tu ayuda. He intentado crear el bucle repetitivo y pasar parametros para que se eliminen, pero al parecer me estaba enredando más XD Entonces se me ocurrió otra forma para conseguir eliminar los registros, y es la de conseguir primero el resultado que quiero y eso pasarlo a otra tabla. Así que logré sacar el resultado que queria.


Aquí está el código que use:

select EMail, max(usuario) as Usuario, max(empresa) as Empresa,
max(tipo) as Tipo, max(pais) as Pais
into prueba
from email
group by email

Gracias por su ayuda muchachos :)

Etiquetas: correo, filas, repetido, sql
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:27.