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

Una consulta conjunta de varias tablas

Estas en el tema de Una consulta conjunta de varias tablas en el foro de Mysql en Foros del Web. tengo una base de dato con dos tablas con campos higuales y quiero consultar esas dos tablas registro repetido como esto seria posible...
  #1 (permalink)  
Antiguo 27/07/2013, 18:37
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Una consulta conjunta de varias tablas

tengo una base de dato con dos tablas con campos higuales y quiero consultar esas dos tablas registro repetido como esto seria posible
  #2 (permalink)  
Antiguo 27/07/2013, 18:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Una consulta conjunta de varias tablas

En primer lugar, si tienes dos tablas distintas, con iguales campos, lo que tienes en apariencia en un diseño de datos bastante malo.
¿Por qué repites estructuras?
Eso no es correcto...
Por otro lado, lo primero que debes hacer es mostrarnos lo que has intentado. O usar al amigo Google, porque es un tema bastante habitual entre los principiantes..

En definitiva, tu problema se resuelve en el JOIN. Puedes verlo en cualquier manual básico.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 27/07/2013, 18:56
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
lo que pasa que estoy tratando de hacer consulta de dos base de datos diferente pero las dos bd tiene la misma estructura es que de una quiero importar a la otra pero ante de esto queiro comprobar datos repetidos

Ejemplo

bd 1
usuario
id,user,pass

------------------

bd 2
usuario
id,user,pass

y quiero comprobar ante de importar las 2 bd

Última edición por gnzsoloyo; 27/07/2013 a las 19:28
  #4 (permalink)  
Antiguo 27/07/2013, 19:42
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Respuesta: Una consulta conjunta de varias tablas

probe esto
Código MySQL:
Ver original
  1. from Tabla1 t1 inner join Tabla2 t2 on
  2. (t1.a1=t2.p1 and t1.a2=t2.p2 and t1.a3=t2.p3 and t1.a4=t2.p4)
y no me sale el resultado como quiero

Última edición por gnzsoloyo; 27/07/2013 a las 21:12
  #5 (permalink)  
Antiguo 27/07/2013, 21:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Una consulta conjunta de varias tablas

No te sale de esa forma porque para usar HAVING con COUNT(), debes estar agrupando, lo que no haces.
Pero tampoco tiene sentido agrupar, por cuanto lo que en realidad estás buscando es saber qué datos están repetidos entre ambas bases para una tabla en especial.
La cosa no es tan sencilla, a pesar de que las consultas necesarias son simples SELECTs con JOINs como correctamente lo has supuesto. Y no es sencillo porque hay muchas consideraciones a realizar, dependiendo de qué datos con tiene cada tabla que se compare.
Por lo pronto, dado el caso de una tabla de usuarios, donde sólo aparecen username y password, la comparación no tiene sentido ni utilidad, porque a menos que haya alguna forma de corroborarlo de forma fechaciente, no puedes asegurar de ningún modo que el mismo usuario en dos bases pertenezca a la misma persona. Es simplemente imposible de aseverar, sin datos adicionales sobre la persona como tal.
¿Se entiende el problema conceptual?

Si la tabla fuese otra, por ejemplo, "persona", para considerar que los datos son duplicados debemos considerar que se trata de la misma persona, para lo cual un ID numérico tampoco sirve, y el nombre es insuficiente (he tenido bases donde existieron 39 personas con el mismo nombre) a menos que cuentes con otros datos clave, como por ejemplo el documento de identidad, o el correo electrónico.
Pero de estos últimos dos datos el primero puede tampoco ser suficiente, a menos que determines de qué pais procede (iguales documentos, diferentes países, diferentes personas). Entonces hay que comparar más datos... Pero, ¿qué pasa si el registro refiere a la misma persona, pero uno contiene datos de domicilio diferentes al otro? ¿Cuál es el válido?

En definitiva, lo que quiero que entiendas es que más allá de las consultas con JOIN, lo que debes hacer es verificar qué campos son los que se compararán, y que consideres que puedes tener un numero de falsos positivos, que sólo podrán corregirse en forma manual.
En otras palabras, lo tuyo requiere una planificación cuidadosa, para realizar la migración de datos desde una base a la otra.
No es una tarea sencilla, y cuando se hace a nivel empresario, el planeamiento previo puede llevás largo más de un año. Y no exagero.

En cualquier caso, si estás totalmente seguro de que los datos entre ambas bases corresponden a usuarios y otros componentes que deben ser forzosamente correspondientes, la consulta es sencilla:

Código MySQL:
Ver original
  1. SELECT U1.id, U1.user, U1.pass
  2. FROM bd1.usuario U1
  3.     INNER JOIN bd2.usuario U2 ON U1.username = U2.username AND U1.pass = B2.pass
Eso devolverá la lista de usuarios que se repiten entre las dos bases. Tan simple como eso.
Ahora bien, si existe la posibilidad de que un mismo usuario aparezca repetidamente en una de las dos tablas, lo que tienes es un problema de consistencia de datos que debes resolver antes de intentar hacer ninguna otra cosa. Esa situación denota errores de construcción de la tabla, y de sistema (faltas de validación) que debe remediarse.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 28/07/2013, 07:38
 
Fecha de Ingreso: junio-2012
Ubicación: En el Mundo
Mensajes: 759
Antigüedad: 11 años, 10 meses
Puntos: 10
Respuesta: Una consulta conjunta de varias tablas

muchas gracias me funciono y tambien con esto me funciono aqui lo dejo
Código MySQL:
Ver original
  1. FROM TABLA1
  2. FROM TABLA2
  3. WHERE TABLA1.CLAVE = TABLA2.CLAVE)
  #7 (permalink)  
Antiguo 28/07/2013, 07:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Una consulta conjunta de varias tablas

Es opción no te la incluí (y podría haberlo hecho), porque no funcionará si entre las dos bases, iguales usuarios no tienen el mismo ID de tabla.
¿Lo consideraste?
¿Lo comprobaste?

Por otro lado, el WHERE es ineficiente en las consultas, porque el parser de MySQL no lo optimiza, y sólo resultan buenos cuando hay indices aplicados sobre los campos consultados en él.
Pero por otro lado, es ineficiente porque el WHERE se aplica en ese caso sobre cada registro que la consulta primaria devuelve, lo que implica que estás creando un producto cartesiano en la ejecución. Y eso es malo.

En definitiva, yo te sugeiría que por simple comprobación hagas las dos consultas y las compares: cuenta los registros que puede obtener la tuya, y verifica con la cantidad de registros que devolvería la lógica que te propongo.
si son iguales, hay que hacer un matching entre ambas para ver si los datos son los mismos, si es distinta... entonces hay IDs distintos entre usuarios con el mismo nombre entre las dos bases, y tienes un serio problema.

no creas que no me he enfrentado a este tipo de problemas. Lo hice, y no son secillos de solucionar. Creeme.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, registro, tabla, tablas
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 00:02.