Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/03/2013, 15:05
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Armar consulta con dos tablas y foreing key para mostrar datos

Hola loncho_rojas:

Este tipo de consultas la hemos tratado infinidad de veces en el foro, te recomiendo que cuando tengas alguna duda te tomes un momento para utilizar la herramienta de búsqueda para ver si hay algo publicado que te pueda servir, o que le preguntes a San GOOGLE, el generalmente tiene la respuesta a muchas de las preguntas de los foristas.

Al tener una doble referencia hacia una misma tabla, lo que debes hacer es un doble JOIN, utilizando un alias distinto para cada caso, sería así:

Código MySQL:
Ver original
  1. mysql> SELECT j.jornada, e1.equipo, e2.equipo
  2.     -> FROM partidos p
  3.     -> INNER JOIN equipos e1 ON e1.id_equipo = p.equipo1
  4.     -> INNER JOIN equipos e2 ON e2.id_equipo = p.equipo2
  5.     -> INNER JOIN jornadas j ON j.id_jornada = p.id_jornada
  6.     -> WHERE p.id_jornada = 1;
  7.  
  8. +---------+-----------+---------------+
  9. | jornada | equipo    | equipo        |
  10. +---------+-----------+---------------+
  11. | Fecha 1 | BARCELONA | REAL MADRID   |
  12. | Fecha 1 | AC MILAN  | BAYERN MUNICH |
  13. +---------+-----------+---------------+
  14. 2 rows in set (1.21 sec)

En cuanto a tu consulta, cabría hacer algunas recomendaciones:

1. La palabra reservada "AS" es completamente obsoleta, de hecho ya no es recomendada dentro de las mejores prácticas de SQL.

2. Evita hacer las uniones entre las tablas en el FROM-WHERE, en lugar de eso utiliza los JOIN's (LEFT, RIGTH, INNER según corresponda), si tienes dudas de como trabajan preguntale a Santa Wikipedia

En lugar de hacer esto:

Código:
FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo 

Has esto:

FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
En tu ejemplo sólo estás haciendo la unión entre tus tablas jornadas y partidos, pero también incluyes la tabla de equipos, por lo tanto se realiza un PRODUCTO CARTESIANO entre tus tablas.

El uso de los JOIN's además de ser más eficiente te ayuda a evitar justamente este tipo de errores.

3. Finalmente, dices que el resultado debería ser

REAL MADRID vs BAYERN MUNICH
BARCELONA vs AC MILAN

Pero observa los datos, para la fecha 1 juegan Real Madrid VS Barcelona, ese es un problema con los datos...

Saludos
Leo.