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

Unir consultas JOIN BETWEEN

Estas en el tema de Unir consultas JOIN BETWEEN en el foro de Mysql en Foros del Web. Unir consultas JOIN BETWEEN Buenas traigo un problemilla con una consulta agradeseria mucho que me ayuden a resolver mi duda y problema.... tengo esta consulta ...
  #1 (permalink)  
Antiguo 12/08/2013, 17:43
 
Fecha de Ingreso: agosto-2009
Mensajes: 1
Antigüedad: 14 años, 8 meses
Puntos: 0
Pregunta Unir consultas JOIN BETWEEN

Unir consultas JOIN BETWEEN
Buenas traigo un problemilla con una consulta agradeseria mucho que me ayuden a resolver mi duda y problema....

tengo esta consulta que esta trabajando bien como yo quiero:

Código:
SELECT * FROM huespedes 
WHERE (DATE(salida) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14') 
OR (DATE(entrada) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14')
AND del='0' ;
y la misma pero con otra tabla:

Código:
SELECT * FROM reservaciones 
WHERE (DATE(salida) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14') 
OR (DATE(entrada) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14')
AND del='0' ;
y quedaria algo asi:
Código:
SELECT * FROM huespedes JOIN reservaciones ON huespedes.id_hab=reservaciones.id_hab 
WHERE (DATE(huespedes.salida) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14') 
OR (DATE(reservaciones.entrada) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14')
AND entregado='0' AND reservaciones.del='0' AND huespedes.del='0' ;
y pues arroja resultados pero no los que debia.... al parecer veo que es un problema en JOIN "reservaciones ON huespedes.id_hab=reservaciones.id_hab" que me arroja id_habs obtenidas pero no toma en cuenta las condiciones U.U

como por ejemplo:

-------------------------+---------+-----------+------+--------+-----------+--------+------------+------------+-------------+----------+----------+------------+---------------------+-----------+-----+
| id | nombre | apellidos | email | id_hab | entrada | salida | anterior | personas | comentarios | datetime | reservacion | del |

id | nombre | apellidos | email | id_hab | entrada | salida | comentarios | res_code | deposito | confirmado | datetime | entregado | del |
-------------------------+---------+-----------+------+--------+-----------+--------+------------+------------+-------------+----------+----------+------------+---------------------+-----------+-----+
| 3 | Patricia | Contreras | [email protected] | 4 | 2013-08-12 | 2013-08-14 | 0 | 0 | | 2013-08-12 02:26:07 | 1 | 0
| 3 | Patricia | Contreras | [email protected] | fijo | 4 | 2013-08-12 | 2013-08-14 | | JKB4MJ | 500 | 1 | 2013-08-12 02:00:59 | 1 | 0 |
| 2 | Armando Alexis | Herra Cortez | [email protected] | 2 | 2013-08-08 | 2013-08-11 | 0 | 1 | ._. | 2013-08-08 01:07:05 | 0 | 0
| 4 | Aley | Fila | [email protected] | 2 | 2013-08-13 | 2013-08-15 | | UEFV1W | 500 | 1 | 2013-08-12 02:31:44 | 0 | 0 |
---------+-----------+------+--------+-----------+--------+------------+------------+-------------+----------+----------+------------+---------------------+-----------+-----+

donde el registro 2 no tiene que hacer ahi U.U

que es lo que esoty haciendo mal o como lo soluciono?

Gracias
  #2 (permalink)  
Antiguo 13/08/2013, 02:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Unir consultas JOIN BETWEEN

Observa que el principal cambio que he hecho es incluir un paréntesis que una en el filtro los elementos reunidos con OR. Eso tiene que hacerlo a la vez y antes que los demás filtros.
Código MySQL:
Ver original
  1. SELECT * FROM huespedes INNER JOIN reservaciones ON huespedes.id_hab=reservaciones.id_hab
  2. WHERE ((DATE(huespedes.salida) BETWEEN '2013-08-12' AND '2013-08-14')
  3. OR (DATE(reservaciones.entrada) BETWEEN DATE '2013-08-12' AND DATE '2013-08-14'))
  4. AND entregado='0' AND reservaciones.del='0' AND huespedes.del='0' ;

Un par de cosas:
no sé por qué usas JOIN en lugar de INNER JOIN. No es lo mismo y deberías usar INNER JOIN
Por qué aplicas DATE a todos los datos, incluso a los que tienen forma de fecha y no incluyen hora.

Etiquetas: join, registro, select, tabla
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 15:34.