| |||
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 |
| |||
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 |
| |||
Respuesta: Una consulta conjunta de varias tablas probe esto y no me sale el resultado como quiero Última edición por gnzsoloyo; 27/07/2013 a las 21:12 |
| ||||
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:
Eso devolverá la lista de usuarios que se repiten entre las dos bases. Tan simple como eso.Ver original 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) |
| |||
Respuesta: Una consulta conjunta de varias tablas muchas gracias me funciono y tambien con esto me funciono aqui lo dejo |
| ||||
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: |