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+------------+--------+-----------+-----------+
| id_persona | nombre | apellido1 | apellido2 |
+------------+--------+-----------+-----------+
| 1 | Pedro | Perez | Mateos |
| 2 | Maria | Ramirez | Marcos |
| 3 | Fulano | de | Tal |
| 4 | Sutano | por | Cual |
+------------+--------+-----------+-----------+
+-----------+----------+----------+
| id_pareja | miembro1 | miembro2 |
+-----------+----------+----------+
| 1 | 1 | 2 |
| 2 | 3 | 4 |
+-----------+----------+----------+
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 -> id_pareja,
-> CONCAT(P1.nombre
, ' ', P1.apellido1
, ' ', P1.apellido2
) miembro1
, -> CONCAT(P2.nombre
, ' ', P2.apellido1
, ' ', P2.apellido2
) miembro2
-> INNER JOIN personas P1
ON P1.id_persona
= R.miembro1
-> INNER JOIN personas P2
ON P2.id_persona
= R.miembro2
; +-----------+--------------------+----------------------+
| id_pareja | miembro1 | miembro2 |
+-----------+--------------------+----------------------+
| 1 | Pedro Perez Mateos | Maria Ramirez Marcos |
| 2 | Fulano de Tal | Sutano por Cual |
+-----------+--------------------+----------------------+
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.