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

Duda cómo relacionar 3 tablas

Estas en el tema de Duda cómo relacionar 3 tablas en el foro de Mysql en Foros del Web. Muy buenas, No consigo realizar una consulta entre 3 tablas, resulta que la tabla 1 se relaciona con la tabla 2 y la tabla 2 ...
  #1 (permalink)  
Antiguo 12/04/2011, 15:42
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Duda cómo relacionar 3 tablas

Muy buenas,

No consigo realizar una consulta entre 3 tablas, resulta que la tabla 1 se relaciona con la tabla 2 y la tabla 2 se relaciona con la tabla 3. Necesito hacer una consulta con las 3 y no se si es que no se puede o no lo se hacer.

Ejemplo, las tabla A y la tabla B se relacionan de la siguiente manera

SELECT * FROM tablaA as A
JOIN tablaB as B
ON A.evento_id = B.evento_id;

De este resultado me gustaria poder relacionarla con la tabla 3, pero no se como.
La único que consigo es creando otra relación entre la tabla B y la tabla C

SELECT * FROM tablaB as B
JOIN tablaC as C
ON B.mercado_id = Cmercado_id;

Pero de esta forma nunca consigo relacionar la tabla A con la C.

Se puede coger el resultado del JOIN de la primera relación A y B y luego hacer otro JOIN con la tabla C?

No se si logro explicarme bien, si no agradecería que me lo hicieráis saber.

Muchas gracias de antemano!
  #2 (permalink)  
Antiguo 12/04/2011, 16:14
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Duda cómo relacionar 3 tablas

¿Y tiene que ser necesariamente con JOIN? porque como yo lo veo se puede relacionar A con B y B con C en una misma consulta. Algo como:

Código MySQL:
Ver original
  1. SELECT * FROM tablaA AS A, tablaB AS B, tablaC AS B WHERE A.evento_id = B.evento_id AND B.mercado_id = C.mercado_id
__________________
La educación y la cortesía abren todas las puertas.
  #3 (permalink)  
Antiguo 12/04/2011, 22:19
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda cómo relacionar 3 tablas

Hola neodani:

Puedes unir el numero de tablas que quieras, no hay restricción. La consulta que propone arepavieja es correcta, pero no es nada eficiente, de hecho NO ES RECOMENDABLE HACER LAS UNIONES DE ESTA MANERA. Utilizando JOIN's quedaría mas o menos así

Código MySQL:
Ver original
  1. SELECT * FROM tablaA  A
  2. JOIN tablaB B ON A.evento_id = B.evento_id
  3. JOIN tablaC C ON B.mercado_id = C.mercado_id

Si tienes oportunidad prueba las dos posibles soluciones (es decir utilizando JOIN vs hacer las uniones en el WHERE) te podrás dar cuenta de la enorme diferencia en el performance de la consulta.

También te recomiendo que le des una revisada a la documentación para observar el funcionamiento del JOIN y algunas de sus características.

http://dev.mysql.com/doc/refman/5.0/es/join.html

Saludos
Leo.
  #4 (permalink)  
Antiguo 12/04/2011, 23:00
Avatar de arepavieja  
Fecha de Ingreso: marzo-2011
Mensajes: 207
Antigüedad: 13 años, 1 mes
Puntos: 9
Respuesta: Duda cómo relacionar 3 tablas

mmmm, interesante explicación leonardo_josue, voy a ver que tanta diferencia hay en ambas propuestas, gracias por la recomendación. :)
__________________
La educación y la cortesía abren todas las puertas.
  #5 (permalink)  
Antiguo 12/04/2011, 23:59
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Duda cómo relacionar 3 tablas

Muchas gracias a los dos!

Siguiendo vuestros consejos lo conseguí. Lo ejecuté de las dos formas, y el resultado es muy parecido (0,0035s) y (0,0034s), quizas porque tampoco tengo en estos momentos muchos resultados.

Al final no eran 3 tablas sino 4 las que tuve que relacionar para sacar la información.

Mi pregunta es, es bueno tener que relacionar tantas tablas para sacar un resumen completo de la información, o es mejor tener esta información en menos tablas con tal de reducir la complejidad de las consultas?

Muchas gracias
  #6 (permalink)  
Antiguo 13/04/2011, 09:34
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda cómo relacionar 3 tablas

Hola de nuevo neodani:

Por el tiempo de ejecución que estás manejando el volumen de información que estás manejando en tus tablas debe ser muy pequeño y por lo tanto no hay mucha diferencia en los tiempos de respuesta, pero con volúmenes del orden de los millones de registros, la diferencia entre consultas puede ser incluso de minutos, pero bueno, esa es otra historia.

En cuanto a lo que comentas acerca de las consultas complejas, si tienes un buen modelado de BD, con sus respectivos índices, relaciones y constraints no debería afectar el número de tablas que intervienen en una consulta. Yo por ejemplo manejo en mi trabajo consultas en donde llegamos a involucrar hasta 20 o 30 tablas sin ningún problema. La mayoría de nuestras tablas son Catálogos, de tal manera que las tablas de información sólo tienen indices hacia los catálogos.

Espero que te sea de utilizad esta información.

Saludos
Leo.

Etiquetas: relacionar, 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 23:46.