Ver Mensaje Individual
  #2 (permalink)  
Antiguo 13/09/2011, 11:21
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: mostrar las dos ciudades (dir empresa y fiscal) de una empresa

Hola LOD_Fredy:

Cuando en un registro tienes referencias múltiples sobre otra tabla, lo que puedes hacer es referencias la misma tabla varias veces, utilizando un alias distinto, checa este script para ver si se entiende un poco mejor:

Código MySQL:
Ver original
  1. mysql> create table ciudades (idCiudad int, descripcion varchar(15));
  2. Query OK, 0 rows affected (0.16 sec)
  3.  
  4. mysql> insert into ciudades values (1, 'Uno'), (2, 'Dos'), (3, 'Tres');
  5. Query OK, 3 rows affected (0.11 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> select * from ciudades;
  9. +----------+-------------+
  10. | idCiudad | descripcion |
  11. +----------+-------------+
  12. |        1 | Uno         |
  13. |        2 | Dos         |
  14. |        3 | Tres        |
  15. +----------+-------------+
  16. 3 rows in set (0.00 sec)
  17.  
  18. mysql> create table empresas (idEmpresa int, descripcion varchar(15),
  19.     -> idCiudad1 int, idCiudad2 int);
  20. Query OK, 0 rows affected (0.08 sec)
  21.  
  22. mysql> insert into empresas values (1, 'Empresa 1', 1, 1),
  23.     -> (2, 'Empresa 2', 1, 2), (3, 'Empresa 3', 2, 3), (4, 'Empresa 4', 3, 3);
  24. Query OK, 4 rows affected (0.03 sec)
  25. Records: 4  Duplicates: 0  Warnings: 0
  26.  
  27. mysql> select * from empresas;
  28. +-----------+-------------+-----------+-----------+
  29. | idEmpresa | descripcion | idCiudad1 | idCiudad2 |
  30. +-----------+-------------+-----------+-----------+
  31. |         1 | Empresa 1   |         1 |         1 |
  32. |         2 | Empresa 2   |         1 |         2 |
  33. |         3 | Empresa 3   |         2 |         3 |
  34. |         4 | Empresa 4   |         3 |         3 |
  35. +-----------+-------------+-----------+-----------+
  36. 4 rows in set (0.00 sec)
  37.  
  38. mysql> select E.idEmpresa, E.descripcion descEmpresa,
  39.     -> C1.descripcion descCiudad1, C2.descripcion descCiudad2
  40.     -> from empresas E
  41.     -> inner join ciudades C1 on E.idCiudad1 = C1.idCiudad
  42.     -> inner join ciudades C2 on E.idCiudad2 = C2.idCiudad;
  43. +-----------+-------------+-------------+-------------+
  44. | idEmpresa | descEmpresa | descCiudad1 | descCiudad2 |
  45. +-----------+-------------+-------------+-------------+
  46. |         1 | Empresa 1   | Uno         | Uno         |
  47. |         2 | Empresa 2   | Uno         | Dos         |
  48. |         3 | Empresa 3   | Dos         | Tres        |
  49. |         4 | Empresa 4   | Tres        | Tres        |
  50. +-----------+-------------+-------------+-------------+
  51. 4 rows in set (0.03 sec)

Observa que la tabla Ciudades se repite dos veces (como C1, y C2) por lo tanto puedes hacer un inner join con los campos respectivos de la tabla empresa. Creo que es más o menos lo que necesitas, pero si continuas con problemas lo comentas para tratar de ayudarte.

Y como comentario final UTILIZA SIEMPRE JOIN'S (INNER, LEFT O RIGTH según sea el caso) en lugar de listar las tablas en el FROM separadas por comas y haciendo las uniones en el WHERE. Además de mejorar el rendimiento de las consultas, el código queda más legible.

Saludos
Leo.