Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Seleccionar varias veces la misma tabla en la cláusula SELECT

Estas en el tema de Seleccionar varias veces la misma tabla en la cláusula SELECT en el foro de Mysql en Foros del Web. Hola estimados, saben traigo atravezado el chamaco con una consulta que necesito, necesito seleccionar varias veces un mismo campo de una tabal, y ya vi ...
  #1 (permalink)  
Antiguo 31/01/2013, 17:40
Avatar de elmoikano  
Fecha de Ingreso: enero-2013
Mensajes: 50
Antigüedad: 11 años, 4 meses
Puntos: 0
Pregunta Seleccionar varias veces la misma tabla en la cláusula SELECT

Hola estimados, saben traigo atravezado el chamaco con una consulta que necesito, necesito seleccionar varias veces un mismo campo de una tabal, y ya vi como en este tutorial:

http://joan.garnet.io/?p=47

el lio ahora es que en en mi tabla tengo tres coluemnas con diferentes datos y la segunda y tercer columna no necesariamente contiene información, puede estar vacia, asi que no se como hacer esa parte, si pongo el operador AND me traera solo aquellos que tienen datos en la columna 1 y dos, y si pongo or, me imprime cosas raras.

aqui mas o menos como esta la tabla:

id |donde1|donde2|donde3
--+--------+----------+---------+-
1 | 1 | | 3 |
2 | 3 | 2 | |


esto lo relaciono con otra tabla que tiene los nombres de las bases, algo asi:

id |nom_base|
--+--------+-
1 |EBSCO|
2 |JSTOR |
3 |ISI |

como resultado esperaria algo asi

id |donde1|donde2|donde3
--+----------+--------+---------+-
1 | EBSCO | | ISI |
2 | ISI |JSTOR | |


aqui demi mi script.

Código MySQL:
Ver original
  1.                        
  2.                         *,
  3.                         bases_uno.nom_base as base1,
  4.                         bases_dos.nom_base as base2,
  5.                         bases_tres.nom_base as base3
  6.                        
  7.                     FROM
  8.                    
  9.                         $tab1,
  10.                         $tab4 as bases_uno,
  11.                         $tab4 as bases_dos,
  12.                         $tab4 as bases_tres
  13.                        
  14.                     where
  15.                        
  16.                         $tab1.donde1=bases_uno.id AND
  17.                         $tab1.donde2=bases_dos.id AND  
  18.                         $tab1.donde3=bases_tres.id
  19.             (ESTA ES LA PARTE DONDE NO SE COMO PODRIA EJECUTAR LA CONSULTA O BIEN QUE OPERADOR PODRIA UTILIZAR, O YA DEPLANO SI EXISTE ALGUNA OTRA FORMA DE CONSULTAR PARA OBTENER EL RESULTADO)            
  20.                     union
  21.                    
  22.                         $tab2 on $tab1.bibliotecario_id=$tab2.id
Cita:
Editado: No se permite código de programación en los foros de BBDD.
Espero se claro en lo que pretendo hacer, y contar con su valiosa ayuda amigo, saludos cordiales. hasta pronto.

Última edición por gnzsoloyo; 01/02/2013 a las 11:23
  #2 (permalink)  
Antiguo 01/02/2013, 11:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 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.
  #3 (permalink)  
Antiguo 01/02/2013, 16:27
Avatar de elmoikano  
Fecha de Ingreso: enero-2013
Mensajes: 50
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Seleccionar varias veces la misma tabla en la cláusula SELECT

leonardo_jouse sos un maestro.... muchas gracias me ha sido de mucha ayuda la fomrula uqe me has dado.

y gracias tambien por la recomendación de usar los Join´s en adelante les dare mas uso a estos.... Saludos cordiales.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:25.