Ver Mensaje Individual
  #4 (permalink)  
Antiguo 14/02/2013, 14:11
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años, 2 meses
Puntos: 447
Respuesta: Duda de querie de relacion de tablas

Hola herwex:

No me queda claro qué es lo que quiere obtener, pero cuando en una tabla tienes una referencia doble hacia otra tabla, lo que tienes que hacer es un doble JOIN sobre la tabla catálogo, utilizando un alias distinto... ejemplos en la red hay mucho, pero acabo de contestar un post en otro foro donde se tiene algo parecido:

Supongamos que tienes la siguiente información:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM personas;
  2. +------------+--------+-----------+-----------+
  3. | id_persona | nombre | apellido1 | apellido2 |
  4. +------------+--------+-----------+-----------+
  5. |          1 | Pedro  | Perez     | Mateos    |
  6. |          2 | Maria  | Ramirez   | Marcos    |
  7. |          3 | Fulano | de        | Tal       |
  8. |          4 | Sutano | por       | Cual      |
  9. +------------+--------+-----------+-----------+
  10. 4 rows IN SET (0.00 sec)
  11.  
  12. mysql> SELECT * FROM relaciones;
  13. +-----------+----------+----------+
  14. | id_pareja | miembro1 | miembro2 |
  15. +-----------+----------+----------+
  16. |         1 |        1 |        2 |
  17. |         2 |        3 |        4 |
  18. +-----------+----------+----------+
  19. 2 rows IN SET (0.00 sec)

Observa que la tabla relaciones tiene una doble referencia hacia la tabla de personas (campos miembro1 y miembro2)... si quisieras obtener los nombres de las personas que forman cada pareja lo que haces es lo siguiente:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   id_pareja,
  3.     ->   CONCAT(P1.nombre, ' ', P1.apellido1, ' ', P1.apellido2) miembro1,
  4.     ->   CONCAT(P2.nombre, ' ', P2.apellido1, ' ', P2.apellido2) miembro2
  5.     -> FROM relaciones R
  6.     -> INNER JOIN personas P1 ON P1.id_persona = R.miembro1
  7.     -> INNER JOIN personas P2 ON P2.id_persona = R.miembro2;
  8. +-----------+--------------------+----------------------+
  9. | id_pareja | miembro1           | miembro2             |
  10. +-----------+--------------------+----------------------+
  11. |         1 | Pedro Perez Mateos | Maria Ramirez Marcos |
  12. |         2 | Fulano de Tal      | Sutano por Cual      |
  13. +-----------+--------------------+----------------------+
  14. 2 rows IN SET (0.00 sec)

Observa que el "truco" está en colocar dos veces la tabla personas:

Código:
...
INNER JOIN personas P1 ON P1.id_persona = R.miembro1
INNER JOIN personas P2 ON P2.id_persona = R.miembro2;
...
Y una recomendación final: Utiliza JOIN's en lugar de hacer las uniones en el FROM-WHERE

Código:
En lugar de hacer esto:

FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo

Has esto:

FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
Aunque el resultado es el mismo, el JOIN está optimizado para hacer las consultas más eficientes.

Has la prueba y si continuas con problemas lo comentas en el foro.

Saludos
Leo.