Comunidad de diseño web y desarrollo en internet online

datos duplicados en tabla

Citar            
MensajeEscrito el 07 Sep 2010 08:02 pm
Buenas a Tod@s!
Estoy con un kilombo enoooorme!!!!
Ni se por donde abordarlo ... pero supongo que la solucion no debe ser taaan compleja, seguro alguno me la puede dar mas o menos rápido. La cosa es así:
Tengo un sistema de tablas, de unas 100 tablas, las cuales tienen 2 campos:
ID_contactos y Recibe
ID_contacto: es el ID de la tabla contacto
Recibe: dato buleano, 0 ó 1 .
Logicamente el campo ID_contacto es clave primaria ... bueno no, no son clave primaria en algunas tablas .. en muchas .

El programa suscribe y desuscribe gente a diferentes tablas..... y ahora tengo la misma persona suscripta mil veces a cada tabla!!! Por suerte esta el campo Recibe que es el que me sirve: si por lo menos una vez esta en 1, pues si esta suscripto y ya ... pero realmente me gustaria borrar todos los que esten repetidos ... pero si estan repetidos y hay 1 que este con Recibe=1, pues dejar ese ... cuando ya esten todos limpios hacer el campo ID_contactos clave primaria y listo.....
Entonces: como puedo hacer una consulta que se fije si el ID esta repetido, que valor de Recibe tiene cada uno y que borre todos menos uno: Si por lo menos 1 tiene Recibe=1 que deje ese y borre todos los demas, sino que me deje uno con Recibe=0.
Entiendo que en realidad el campo Recibe es inutil .. ya que si esta el ID es que SI recibe y ya .. pero bueno, ese error me salvo!!!
En realidad necesito limpiarlas porque ahora si me esta dando errores....
Alguna solucion mas o menos viable?!??!?
Gracias!!!!

Por pabletein

86 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Sep 2010 10:38 am
Hola pabletein,

no se si llego tarde, pero te pongo una posible solución según he entendido.

La mejor solución es emplear una herramienta de tratamiento masivo de datos como ETL o Data Quality. Estas herramientas tienen utilidades para realizar estas tareas fácilmente, pero si no las conoces en este caso no te interesa ya que perderás más tiempo aprendiendo y familiarizándote con ellas que encontrando otra solución. Por si acaso te paso el enlace a una herramientas para el tratamiento masivo de información open source V-Data: http://vdata.codeplex.com/.

La otra solución que se me ocurre es crear un procedimiento almacenado que acceda a todas las tablas y de cada una extraiga el ID_contacto de aquellos registros con Recibe = 1 almacenándo en una tabla temporal los registros obtenidos y el nombre de la tabla de donde procede.
De esta forma obtienes todos los ID_contacto con Recibe = 1 existentes. De ahí puedes sacar los ID_contacto únicos y mediante joins todos los ID_contacto de todas las tablas con Recibe=0 pero que poseen algún ID_contacto con Recibe=1.
Además, con un left_outer_join (o right) puedes obtener todos los ID_contacto que no poseen ningún Recibe = 1 en ninguna tabla.

En resumen, crear una tabla con los que tienen Recibe = 1 de todas las tablas y realizar joins entre esa tabla y las demás para obtener la información deseada en cada caso.

Espero haberte ayudado un poco.

Por Toth

9 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 13 Sep 2010 04:31 pm
Muchas gracios Toth!!!!
Seguramente lo intente como me dijiste con lo de los JOIN .. que es lo que mas o menos ... mas menos que mas ..... entiendo .... pero me doy cuenta que es un camino posible.
Por ahora no trae problemas, cualquier cosa te aviso.
Muchas gracias nuevamente por la ayuda
Saludos
Pablo

Por pabletein

86 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.