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

Consulta con tres tablas y 2 id en una de ellas

Estas en el tema de Consulta con tres tablas y 2 id en una de ellas en el foro de Mysql en Foros del Web. Tengo 3 tablas: EQUIPOS de futbol (campos: equipo_id y nombre_equipo) ejemplo: 1 Real Madrid 2 FC Barcelona 3 Malaga 4 Zaragoza CALENDARIOS de la liga ...
  #1 (permalink)  
Antiguo 04/08/2011, 02:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 2
Antigüedad: 16 años, 2 meses
Puntos: 0
Consulta con tres tablas y 2 id en una de ellas

Tengo 3 tablas:

EQUIPOS de futbol (campos: equipo_id y nombre_equipo)
ejemplo:

1 Real Madrid
2 FC Barcelona
3 Malaga
4 Zaragoza

CALENDARIOS de la liga (campos: calendario_id, equipo_local_id, equipo_visitante_id)
ejemplo

1 | 1 | 2 ---> Real Madrid vs FC Barcelona
2 | 3 | 4 ---> Malaga vs Zaragoza
3 | 1 | 3 ---> Real Madrid vs Malaga
4 | 2 | 4 ---> FC Barcelona vs Zaragoza

Y la tercera tabla RESULTADOS (campos: resultado_id, calendario_id, total_goles)
ejemplo

1 | 1 | 8
2 | 2 | 0
3 | 3 | 2
4 | 4 | 4

la relaciones son entre los campos id que se llaman igual menos en la segunda tabla la de calendarios ya que EQUIPO_LOCAL_ID y EQUIPO_VISITANTE_ID que estan relacionados con el campo de la tabla de EQUIPOS con el campo ID EQUIPO_ID

El problema que tengo es que al hacer el select solo consigo que me devuelta los datos de la siguiente manera

Partido 1 | Real Madrid | 8 Goles
Partido 1 | FC Barcelona | 8 goles
Partido 2 | Malaga | 4 Goles
Partido 2 | Zaragoza | 4 Goles

etc ..

la consulta que uso es:

Código SQL:
Ver original
  1. SELECT * FROM equipos e INNER JOIN calendarios c ON e.equipo_id=c.equipo_local_id OR e.equipo_id=c.equipo_visitante_id INNER JOIN resultados r ON r.calendario_id=c.calendario_id

Y me interesa que me salga de la siguiente manera ...

Partido 1 | Real Madrid | FC Barcelona | 8 Goles
Partido 2 | Malaga | Zaragoza | 4 Goles

etc ...

¿Como podria hacer la consulta para conseguir esto?

Gracias

Última edición por madpunk; 04/08/2011 a las 03:25
  #2 (permalink)  
Antiguo 04/08/2011, 07:38
 
Fecha de Ingreso: agosto-2011
Mensajes: 59
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Consulta con tres tablas y 2 id en una de ellas

El problema es que listas según los equipos no los calendarios..
prueba a ver si esta te va (lo siento he cambiado los nombres) y no esto acostumbrada a usar inner....



SELECT c.calendario_id, l.nombre, v.nombre, r.total_goles
FROM calendarios c, equipo l, equipo v, resultados r
WHERE l.equipo_id = c.equipo_local_id
AND v.equipo_id = c.equipo_visitante_id
AND r.calendario_id = c.calendario_id
  #3 (permalink)  
Antiguo 04/08/2011, 07:42
 
Fecha de Ingreso: agosto-2011
Mensajes: 59
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Consulta con tres tablas y 2 id en una de ellas

a mi me sale este resultado

calendario_id nombre nombre total_goles
1 Real Madrid FC Barcelona 8
2 Malaga Zaragoza 0
3 Real Madrid Malaga 2
4 2 FC Barcelona Zaragoza 4
  #4 (permalink)  
Antiguo 04/08/2011, 08:26
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta con tres tablas y 2 id en una de ellas

Hola madpunk:

La consulta que pone nifdya es correcta, aunque en lo particular he comprobado que es mucho más eficiente el uso del INNER JOIN que listas las tablas en el FROM y hacer las uniones en el WHERE. Además de tener mejor desempeño, sobre todo con tablas muy grandes, en lo particular me parece que las consultas quedan más legibles y "limpias".

La consulta quedaría así:

Código MySQL:
Ver original
  1. SELECT c.calendario_id, l.nombre_equipo, v.nombre_equipo, r.total_goles
  2. FROM calendarios c
  3. INNER JOIN equipos l ON l.equipo_id = c.equipo_local_id
  4. INNER JOIN equipos v ON v.equipo_id = c.equipo_visitante_id
  5. INNER JOIN resultados r ON r.calendario_id = c.calendario_id

Con los datos que pones de ejemplo el resultado como bien hace notar nifdya sería el siguiente:

Código:
calendario_id  nombre_equipo  nombre_equipo  total_goles
-------------  -------------  -------------  -----------
            1  Real Madrid    FC Barcelona             8
            2  Malaga         Zaragoza                 0
            3  Real Madrid    Malaga                   2
            4  FC Barcelona   Zaragoza                 4
Es cuestión que compares ambas consultas con tus datos y utilices aquella que en tu caso tenga un mejor desempeño.

Saludos
Leo.
  #5 (permalink)  
Antiguo 04/08/2011, 08:28
 
Fecha de Ingreso: febrero-2008
Mensajes: 2
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: Consulta con tres tablas y 2 id en una de ellas

Muchas gracias a los dos.

El producto cartesiano no es lo mas optimizado, asi que lo adapte al uso de INNER JOIN y funciono perfectamente.

Si es que hoy tenia un dia obtuso de narices.

Duda solucionada

Etiquetas: campos, select, tabla, tablas, tres
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:21.