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

[SOLUCIONADO] query compleja

Estas en el tema de query compleja en el foro de Mysql en Foros del Web. gente del foro, necesito hace una busqueda en la bd en dos tablas. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original SELECT empleados. * , pre_solicitud. * ...
  #1 (permalink)  
Antiguo 23/10/2013, 05:23
Avatar de Maverik2  
Fecha de Ingreso: agosto-2010
Mensajes: 67
Antigüedad: 11 años, 10 meses
Puntos: 1
query compleja

gente del foro, necesito hace una busqueda en la bd en dos tablas.

Código MySQL:
Ver original
  1. SELECT empleados.*, pre_solicitud.*
  2. FROM empleados, pre_solicitud WHERE disponible=1

esa consulta me devuelve lo siguiente

Código MySQL:
Ver original
  1. id nombre apellido celular direccion disponible | id id_solicitud id_empleado
esto me da todas las pre solicitudes y todos los empleados, pero me duplica los empleados

alguien sabe como hacer para que me devuelva todos los empleados y las pre_solicitudes para esos empleados en caso que las tenga, si no las tiene que no me devuelva nada

Última edición por gnzsoloyo; 23/10/2013 a las 06:07 Razón: Mal etiquetado
  #2 (permalink)  
Antiguo 23/10/2013, 07:47
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 15 años, 6 meses
Puntos: 447
Respuesta: query compleja

Hola Maverik2:

Tu consulta para nada es compleja... de hecho es bastante básica , sólo que creo que no te tomaste un tiempo para aprender las nociones de SQL.

No estás colocando ninguna relación entre tus tablas, por lo tanto se está realizando un PRODUCTO CARTESIANO:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +------+-------------+
  3. | id   | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. +------+-------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM tabla2;
  12. +------+-------------+
  13. | id   | descripcion |
  14. +------+-------------+
  15. |    1 | uno         |
  16. |    2 | dos         |
  17. |    3 | tres        |
  18. +------+-------------+
  19. 3 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT * FROM tabla1, tabla2;
  22. +------+-------------+------+-------------+
  23. | id   | descripcion | id   | descripcion |
  24. +------+-------------+------+-------------+
  25. |    1 | uno         |    1 | uno         |
  26. |    2 | dos         |    1 | uno         |
  27. |    3 | tres        |    1 | uno         |
  28. |    1 | uno         |    2 | dos         |
  29. |    2 | dos         |    2 | dos         |
  30. |    3 | tres        |    2 | dos         |
  31. |    1 | uno         |    3 | tres        |
  32. |    2 | dos         |    3 | tres        |
  33. |    3 | tres        |    3 | tres        |
  34. +------+-------------+------+-------------+
  35. 9 rows in set (0.00 sec)
  36.  
  37. mysql> SELECT * FROM tabla1, tabla2 WHERE tabla1.id = 1;
  38. +------+-------------+------+-------------+
  39. | id   | descripcion | id   | descripcion |
  40. +------+-------------+------+-------------+
  41. |    1 | uno         |    1 | uno         |
  42. |    1 | uno         |    2 | dos         |
  43. |    1 | uno         |    3 | tres        |
  44. +------+-------------+------+-------------+
  45. 3 rows in set (0.00 sec)

es decir, cada registro de tu tabla 1 se une con cada registro de tu tabla2...

No nos dices por qué campo están relacionadas tus tablas, puedo suponer que se trata de los campos (id e id_empleado), pero eso sólo tú lo sabes...

En lugar de poner las tablas en el FROM separadas por comas (JOIN implícito)

Código:
...
FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo
Has un JOIN EXPLICITO:

Código:
...
FROM tabla1 INNER JOIN tabla2 ON tabla2.campo = tabla2.campo
Con el ejemplo que puse quedaría así:

Código:
mysql> SELECT * FROM tabla1 INNER JOIN tabla2 ON tabla1.id = tabla2.id;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | uno         |
|    2 | dos         |    2 | dos         |
|    3 | tres        |    3 | tres        |
+------+-------------+------+-------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM tabla1 INNER JOIN tabla2 ON tabla1.id = tabla2.id
    -> WHERE tabla1.id = 1;
+------+-------------+------+-------------+
| id   | descripcion | id   | descripcion |
+------+-------------+------+-------------+
|    1 | uno         |    1 | uno         |
+------+-------------+------+-------------+
1 row in set (0.00 sec)
Puedes leer más acerca del JOIN en SANTA WIKIPEDIA:

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

Observa los ejemplos con LEFT y RIGTH para los casos donde los empleados no tengan solicitudes.

Saludos
Leo.
  #3 (permalink)  
Antiguo 24/10/2013, 04:44
Avatar de Maverik2  
Fecha de Ingreso: agosto-2010
Mensajes: 67
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: query compleja

gracias leonardo_josue no solo por resolver mi problema sino por explicarme el inner join

Etiquetas: select
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 05:53.