eliminación de duplicados quédate con UNO.

20/04/2008 - 00:13 por David | Informe spam
Muy buenas,

Microsoft SQL Server 2000

Teniendo una tabla tan simple como

direcciones

[id] autonumérico, calve principal
[email] cadena que almacena la dirección electrónica

En la tabla se almacenan correos electrónicos DUPLICADOS (triplicados,
cuadrúplicados, ..., vete tú a saber, creo que existen mas de 20.000
e-mails), el hecho es que hay datos REPETIDOS.

¿Cómo podría montar una consulta de eliminación que eliminara los registros
"redundantes" y se quedara con uno?
me explico:

1 pepe@hotmail.com
2 miguel@hotmail.com
3 pepe@hotmail,com
4 pepe@hotmail.com
5 david@hotmail.com
6 miguel@hotmail.com

Despúes de la eliminación de "duplicados quedate con uno", la tabla quedaría
con los siguientes datos
(es indiferente con cual se quede de los duplicados)

1 pepe@hotamil.com
6 miguel@hotmailcom
5 david@hotamil.com

INSISTO es indiferente el registro duplicado que mantiene (lo comento porque
he puesto la clave principal y para no llevar a confusiones)

Reconozco que no tengo ni "p.i." de cómo meterle mano a la consulta.

Gracias de antemano.

Nota: me da un poco de "cosa" el ni tan siquiera plantear una posible
solución, pero n.p.i.

Preguntas similare

Leer las respuestas

#1 Maxi Accotto
20/04/2008 - 00:18 | Informe spam
http://support.microsoft.com/kb/139444


Microsoft MVP SQLServer
www.sqltotalconsulting.com
-

"David" escribió en el mensaje de
noticias:
Muy buenas,

Microsoft SQL Server 2000

Teniendo una tabla tan simple como

direcciones

[id] autonumérico, calve principal
[email] cadena que almacena la dirección electrónica

En la tabla se almacenan correos electrónicos DUPLICADOS (triplicados,
cuadrúplicados, ..., vete tú a saber, creo que existen mas de 20.000
e-mails), el hecho es que hay datos REPETIDOS.

¿Cómo podría montar una consulta de eliminación que eliminara los
registros "redundantes" y se quedara con uno?
me explico:

1
2
3 ,com
4
5
6

Despúes de la eliminación de "duplicados quedate con uno", la tabla
quedaría con los siguientes datos
(es indiferente con cual se quede de los duplicados)

1
6
5

INSISTO es indiferente el registro duplicado que mantiene (lo comento
porque he puesto la clave principal y para no llevar a confusiones)

Reconozco que no tengo ni "p.i." de cómo meterle mano a la consulta.

Gracias de antemano.

Nota: me da un poco de "cosa" el ni tan siquiera plantear una posible
solución, pero n.p.i.


Respuesta Responder a este mensaje
#2 David
20/04/2008 - 00:38 | Informe spam
Mil gracias por contestar

http://support.microsoft.com/kb/139444

"tela marinera"

Ahora mismo para manipular esa tabla con e-mail's repetidos estoy haciendo
esto:

SELECT DISTINCT email FROM direcciones

Había pensado en realizar este tipo de SELECT, para posteriormente "llenar"
una tabla VIRGEN y cargarme la que tiene duplicados.

Pero, directamente no se podría implementar un "DELETE de duplicados,
quédate con uno" ( :-)
Respuesta Responder a este mensaje
#3 Carlos M. Calvelo
20/04/2008 - 00:53 | Informe spam
Hola David,

On 20 apr, 00:13, "David" wrote:

Teniendo una tabla tan simple como

direcciones

[id] autonumérico, calve principal
[email] cadena que almacena la dirección electrónica


Despúes de la eliminación de "duplicados quedate con uno", la tabla quedaría
con los siguientes datos
(es indiferente con cual se quede de los duplicados)

1
6
5

INSISTO es indiferente el registro duplicado que mantiene (lo comento porque
he puesto la clave principal y para no llevar a confusiones)




Despues de leer esto (y si entiendo bien) no necesitas la
columna [id] para nada en la tabla.

Por qué no tener esta estructura entonces?
direcciones

[email] varchar() (o lo que sea) not null primary key (o unique
index)

Saludos,
Carlos
Respuesta Responder a este mensaje
#4 David
20/04/2008 - 01:07 | Informe spam
Otras mil gracias por contestar.

El caso es que la tabla está así (la base de datos me la encontré así,
supongo que el padre de la criatura cerró la puerta antes de salir
corriendo)

Retomando el tema, ¿es posible realizar un "DELETE de duplicados quédate con
uno" :-)?
Respuesta Responder a este mensaje
#5 Carlos M. Calvelo
20/04/2008 - 01:50 | Informe spam
Hola David,

On 20 apr, 01:07, "David" wrote:
Otras mil gracias por contestar.

El caso es que la tabla está así (la base de datos me la encontré así,
supongo que el padre de la criatura cerró la puerta antes de salir
corriendo)



Eso quiere decir que no sabes como está siendo utilizado
el [id]. Por ejemplo como referencia desde otras tablas.
Y por tanto no puedes estar segugo de cuales puedes borrar.


Retomando el tema, ¿es posible realizar un "DELETE de duplicados quédate con
uno" :-)?



Si.
Podrías borrar todos aquellos registors con un [id]
que no estén en en el resultado de este select

select min([id]) from direcciones group by email

Saludos,
Carlos
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida