Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/07/2013, 21:29
Avatar de gnzsoloyo
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, 5 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)