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

[SOLUCIONADO] Mostrar todos los datos de 2 tablas con diferentes registros.

Estas en el tema de Mostrar todos los datos de 2 tablas con diferentes registros. en el foro de Mysql en Foros del Web. Saludos. El motivo por el cual escribo es el siguiente: Tengo dos tablas (TABLE_A, TABLE_B). TABLE_A tiene 3 columnas. TABLE_B tiene 5 columnas. Necesito unir ...
  #1 (permalink)  
Antiguo 07/02/2013, 17:23
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 16 años, 4 meses
Puntos: 4
Exclamación Mostrar todos los datos de 2 tablas con diferentes registros.

Saludos.

El motivo por el cual escribo es el siguiente:

Tengo dos tablas (TABLE_A, TABLE_B).

TABLE_A tiene 3 columnas.
TABLE_B tiene 5 columnas.

Necesito unir las tablas de tal manera que pueda mostrar las 8 columnas con sus respectivos datos.

El problema es que el total de registros entre TABLE_A y TABLE_B son distintos y necesito mostrarlos todos (sin repetir registros).

Por ejemplo:

Tanto en TABLE_A como en TABLE_B tengo 143 registros.
De esos 143, tengo:
- 89 que coinciden en ambas tablas.
- 54 en TABLE_A que no aparecen en TABLE_B.
- 55 en TABLE_B que no aparecen en TABLE_A.

Lo cual me da un total de 198 registros, los cuales no logro conseguir con una buena consulta.

La consulta que tengo es:

Código MySQL:
Ver original
  1. SELECT A.ID, A.COL2, A.COL3, B.ID, B.COL2, B.COL3, B.COL4, B.COL5
  2. FROM TABLE_A A
  3. INNER JOIN TABLE_B B USING(ID)
  4.  
  5.  
  6. SELECT A.ID, A.COL2, A.COL3, NULL, NULL, NULL, NULL, NULL
  7. FROM TABLE_A A
  8. WHERE A.ID NOT IN(
  9.     SELECT B.ID
  10.     FROM TABLE_B B
  11. )
  12.  
  13.  
  14. SELECT ID, NULL, NULL, NULL, B.COL2, B.COL3, B.COL4, B.COL5
  15. FROM TABLE_B B
  16. WHERE B.ID NOT IN(
  17.     SELECT A.ID
  18.     FROM TABLE_A A 
  19. );

Obviamente es una consulta demasiado larga y tarda mucho, quisiera saber si es posible mejorarla para reducir la duración de la consulta.

De antemano muchas gracias.
  #2 (permalink)  
Antiguo 08/02/2013, 02:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Mostrar todos los datos de 2 tablas con diferentes registros.

Código MySQL:
Ver original
  1. SELECT A.ID, A.COL2, A.COL3, B.ID, B.COL2, B.COL3, B.COL4, B.COL5
  2. FROM TABLE_A A
  3. LEFT JOIN TABLE_B B ON A.ID=B.ID
  4. SELECT A.ID, A.COL2, A.COL3, B.ID, B.COL2, B.COL3, B.COL4, B.COL5
  5. FROM TABLE_A A
  6. RIGHT JOIN TABLE_B B ON A.ID=B.ID

Primero usamos LEFT JOIN eso nos da TODOS los registros de A y su correspondiente de B o null si no lo hay.
Seundo usamos RIGHT JOIN eso nos da TODOS los registros de B y su correspondiente de A o null si no lo hay.

Finalmente unimos con UNION (sin ALL) que nos da los registros de las dos querys sin repeticiones.

Era esto? Va mas rápido?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 06/03/2013, 17:26
 
Fecha de Ingreso: agosto-2008
Mensajes: 82
Antigüedad: 16 años, 4 meses
Puntos: 4
Respuesta: Mostrar todos los datos de 2 tablas con diferentes registros.

Vaya, quedó de lujo... sólo que al ejecutar esto desde una conexión "Microsoft.Jet.OLEDB.4.0" (aplicando la query a un archivo xls), ya no arroja el mismo resultado...

Supongo que ese tema debo iniciarlo en el foro indicado... pero si aquí, tuvieron que verlo 108 veces para darme una respuesta, no quiero imaginarme lo que tardará en el foro de Access... hahahaha

Muchas gracias por tu respuesta quimfv...
  #4 (permalink)  
Antiguo 07/03/2013, 03:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 9 meses
Puntos: 574
Respuesta: Mostrar todos los datos de 2 tablas con diferentes registros.

Si mejor que preguntes a los que dominen el jet...

En cuanto a las 108 visualizaciones .... no todo el mundo entra para responder y en todo caso esto es voluntario... y tu has tardado un mes en leer la respuesta!!!
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 07/03/2013, 06:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Mostrar todos los datos de 2 tablas con diferentes registros.

Cita:
Microsoft.Jet.OLEDB.4.0
Es un motor medio rudimentario, incapaz de manejar consultas de cierta complejidad para ningún DBMS que se respete.
Básicamente es más una herramienta para aplicaciones de oficina que necesitan acceder a tablas simples, y no es capaz de interpretar SQL avanzado.
Si lo que quieres es una conexión a MySQL desde Excel, probablemente puedas usar el MyODBC Connector, de MySQL. Búscalos en la web oficial.
__________________
¿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: avanzado, cross, expertos, join, union
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 21:42.