Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/10/2017, 07:51
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 4 meses
Puntos: 774
Respuesta: Consulta compleja en reserva de fechas

empieza a debuggear tu codigo, seguro que con esta condicion no te muestra dicha propiedad?

Código SQL:
Ver original
  1. SELECT
  2.         propiedad.codigo_propiedad,
  3.         propiedad_reserva.START,
  4.         propiedad_reserva.END
  5.  
  6. /*,propiedad_tipo.nombre as tipo,
  7.                 propiedad_categoria.nombre as categoria,
  8.                 regiones.region_ordinal,
  9.                 regiones.region_nombre,
  10.                 provincia.provincia_nombre as provincia,
  11.                 comunas.comuna_nombre as comuna,
  12.                 propiedad_reserva.start,
  13.                 propiedad_reserva.end*/
  14.  FROM propiedad
  15.       INNER JOIN propiedad_tipo ON propiedad.propiedad_tipo_id =
  16.        propiedad_tipo.id
  17.       LEFT OUTER JOIN propiedad_reserva ON propiedad.id =
  18.        propiedad_reserva.propiedad_id
  19.       INNER JOIN propiedad_categoria ON propiedad.categoria =
  20.        propiedad_categoria.id
  21.       INNER JOIN regiones ON propiedad.region = regiones.region_id
  22.       INNER JOIN provincia ON propiedad.provincia = provincia.provincia_id
  23.       INNER JOIN comunas ON propiedad.comuna = comunas.comuna_id
  24.  
  25.  
  26.  WHERE
  27.  
  28.  NOT EXISTS (SELECT * FROM propiedad_reserva WHERE propiedad_reserva.start>= '2017-10-3' AND propiedad_reserva.END <= '2017-10-7')

Ahora estas haciendo un left outer en la tabla de propiedad reserva, usando el id_propiedad, si la propiedad tiene 2 valores en tu tabla va a aparecer estas 2 veces aunque en el where le pongas que no te tome la segunda, porque? bueno al poner el where le estas diciendo que quite la propiedad que tiene el rango, pero la otra no la quitas por eso sigue apareciendo.

Podrias hacer el left outer con esto:


Código SQL:
Ver original
  1. SELECT
  2.         propiedad.codigo_propiedad,
  3.         propiedad_reserva.START,
  4.         propiedad_reserva.END
  5.  
  6. /*,propiedad_tipo.nombre as tipo,
  7.                 propiedad_categoria.nombre as categoria,
  8.                 regiones.region_ordinal,
  9.                 regiones.region_nombre,
  10.                 provincia.provincia_nombre as provincia,
  11.                 comunas.comuna_nombre as comuna,
  12.                 propiedad_reserva.start,
  13.                 propiedad_reserva.end*/
  14.  FROM propiedad
  15.       INNER JOIN propiedad_tipo ON propiedad.propiedad_tipo_id =
  16.        propiedad_tipo.id
  17.       LEFT OUTER JOIN
  18. (SELECT id_propiedad, reserva_end, reserva_start FROM propiedad_reserva WHERE propiedad_reserva.start>= '2017-10-3' AND propiedad_reserva.END <= '2017-10-7')
  19. propiedad_reserva ON propiedad.id <>
  20.        propiedad_reserva.propiedad_id
  21.  
  22.  
  23.       INNER JOIN propiedad_categoria ON propiedad.categoria =
  24.        propiedad_categoria.id
  25.       INNER JOIN regiones ON propiedad.region = regiones.region_id
  26.       INNER JOIN provincia ON propiedad.provincia = provincia.provincia_id
  27.       INNER JOIN comunas ON propiedad.comuna = comunas.comuna_id

Aqui si encuentra el 157 en el rango de fechas, no lo va a incluir en el join, prueba y comenta
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me