Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/02/2013, 11:07
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: Seleccionar varias veces la misma tabla en la cláusula SELECT

Hola elmoikano:

En primer lugar, al tener valores opcionales en tus columnas, dado que existen columnas con valores nulos, no puedes hacer la unión entre tus tablas con FROM-WHERE... debes hacer uso de LEFT JOIN. De hecho, hacer las uniones con FROM-WHERE no es recomendable en absoluto.

En lugar de hacer esto:

Código:
...
FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo
...
Haz JOIN (INNER, LEFT O RIGTH según se necesite)

Código:
...
FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
...
Si tienes dudas acerca de cómo funcionan cada uno de ellos checa esta página de SANTA WIKIPEDIA:

http://es.wikipedia.org/wiki/Join

Ahora bien, pasando a tu problema... creo que esto te podría servir:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaX;
  2. +------+--------+--------+--------+
  3. | id   | donde1 | donde2 | donde3 |
  4. +------+--------+--------+--------+
  5. |    1 |      1 |   NULL |      3 |
  6. |    2 |      3 |      2 |   NULL |
  7. |    1 |      1 |   NULL |      3 |
  8. |    2 |      3 |      2 |   NULL |
  9. |    3 |   NULL |      2 |      1 |
  10. |    4 |      1 |   NULL |   NULL |
  11. |    5 |   NULL |      2 |   NULL |
  12. |    6 |   NULL |   NULL |      3 |
  13. |    7 |   NULL |   NULL |   NULL |
  14. +------+--------+--------+--------+
  15. 9 rows in set (0.00 sec)
  16.  
  17. mysql> SELECT * FROM tablaY;
  18. +------+----------+
  19. | id   | nom_base |
  20. +------+----------+
  21. |    1 | EBSCO    |
  22. |    2 | JSTOR    |
  23. |    3 | ISI      |
  24. +------+----------+
  25. 3 rows in set (0.00 sec)
  26.  
  27. mysql> SELECT TX.id, TY1.nom_base, TY2.nom_base, TY3.nom_base
  28.     -> FROM tablaX TX
  29.     -> LEFT JOIN tablaY TY1 ON TX.donde1 = TY1.id
  30.     -> LEFT JOIN tablaY TY2 ON TX.donde2 = TY2.id
  31.     -> LEFT JOIN tablaY TY3 ON TX.donde3 = TY3.id;
  32. +------+----------+----------+----------+
  33. | id   | nom_base | nom_base | nom_base |
  34. +------+----------+----------+----------+
  35. |    1 | EBSCO    | NULL     | ISI      |
  36. |    2 | ISI      | JSTOR    | NULL     |
  37. |    1 | EBSCO    | NULL     | ISI      |
  38. |    2 | ISI      | JSTOR    | NULL     |
  39. |    3 | NULL     | JSTOR    | EBSCO    |
  40. |    4 | EBSCO    | NULL     | NULL     |
  41. |    5 | NULL     | JSTOR    | NULL     |
  42. |    6 | NULL     | NULL     | ISI      |
  43. |    7 | NULL     | NULL     | NULL     |
  44. +------+----------+----------+----------+
  45. 9 rows in set (0.00 sec)

Observa que agregué registros para poder mostrar todos los posibles casos que puedes tener en tu tabla...

Y como recomendación final, NO INCLUYAS CODIGO PHP, supongo que alguno de los administradores del sitio editó tu post, recuerda que por políticas del foro no debes incluir código que no sea solo SQL.

Saludos
Leo.