Tema: Consulta
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/07/2011, 09:57
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta

Hola JeMaGa:

al tener varios campos relacionados con la misma tabla puedes hacer varios INNER JOIN sobre esa tabla, utilizando un alias distinto para cada campo. creo que queda más claro con el ejemplo:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE personas(Cod_Persona INT,
  2.     -> Nombre_Persona VARCHAR(15),Cargo_Persona VARCHAR(15),
  3.     -> AREA VARCHAR(15));
  4. Query OK, 0 rows affected (0.10 sec)
  5.  
  6. mysql> INSERT INTO personas VALUES
  7.     -> (1, 'persona uno', 'cargo uno', 'area uno'),
  8.     -> (2, 'persona dos', 'cargo dos', 'area dos'),
  9.     -> (3, 'persona tres', 'cargo tres', 'area tres');
  10. Query OK, 3 rows affected (0.08 sec)
  11. Records: 3  Duplicates: 0  Warnings: 0
  12.  
  13. mysql> SELECT * FROM personas;
  14. +-------------+----------------+---------------+-----------+
  15. | Cod_Persona | Nombre_Persona | Cargo_Persona | AREA      |
  16. +-------------+----------------+---------------+-----------+
  17. |           1 | persona uno    | cargo uno     | area uno  |
  18. |           2 | persona dos    | cargo dos     | area dos  |
  19. |           3 | persona tres   | cargo tres    | area tres |
  20. +-------------+----------------+---------------+-----------+
  21. 3 rows in set (0.00 sec)
  22.  
  23. mysql> CREATE TABLE firmas (Cod_Doc INT, VERSION VARCHAR(10),
  24.     -> Elabora INT, Fecha_Elabora DATE,
  25.     -> Revisa INT, Fecha_Revisa DATE,
  26.     -> Aprueba INT, Fecha_Aprueba DATE);
  27. Query OK, 0 rows affected (0.23 sec)
  28.  
  29. mysql> INSERT INTO firmas VALUES (1, '1.0',
  30.     -> 1, '2011-07-19',
  31.     -> 2, '2011-07-20',
  32.     -> 3, '2011-07-21');
  33. Query OK, 1 row affected (0.07 sec)
  34.  
  35. mysql> SELECT cod_doc, elabora, revisa, aprueba FROM firmas;
  36. +---------+---------+--------+---------+
  37. | cod_doc | elabora | revisa | aprueba |
  38. +---------+---------+--------+---------+
  39. |       1 |       1 |      2 |       3 |
  40. +---------+---------+--------+---------+
  41. 1 row in set (0.00 sec)
  42.  
  43. mysql> SELECT f.cod_doc, p1.nombre_persona elabora,
  44.     -> p2.nombre_persona revisa, p3.nombre_persona aprueba FROM firmas f
  45.     -> INNER JOIN personas p1 ON f.elabora = p1.cod_persona
  46.     -> INNER JOIN personas p2 ON f.revisa = p2.cod_persona
  47.     -> INNER JOIN personas p3 ON f.aprueba = p3.cod_persona;
  48. +---------+-------------+-------------+--------------+
  49. | cod_doc | elabora     | revisa      | aprueba      |
  50. +---------+-------------+-------------+--------------+
  51. |       1 | persona uno | persona dos | persona tres |
  52. +---------+-------------+-------------+--------------+
  53. 1 row in set (0.00 sec)

Observa que estoy haciendo 3 JOINS con la tabla personas, pero cada uno tiene un alias diferente, así puedo ligar cada campo por separado.

Dale un vistazo para ver si te sirve.

Saludos
Leo.