Estoy trabajando en una herramienta de reserva de aulas. Un componente central es la capacidad de comparar el rango de fechas solicitado con las reservas existentes, para garantizar que no haya superposición. He leído varias preguntas relacionadas con el rango de fechas aquí, y estudié la explicación e implementación de Salman del álgebra de intervalos de Allen ( Consulta SQL para encontrar rangos de fechas superpuestos (en conflicto) ) hasta que lo entendí. Aquí hay una versión simplificada de lo que se me ocurrió.
tblRooms
roomID room
5 110
30 178
tblReservations
reservedID fkRoom dateIn dateOut
1 5 3/10/2017 3/15/2017
2 5 3/1/2017 3/3/2017
4 5 4/1/2017 4/30/2017
SELECT DISTINCTROW tblRooms.roomID, tblRooms.room
FROM tblRooms LEFT JOIN tblReservations
ON tblRooms.roomID = tblReservations.fkRoom
WHERE NOT Exists (
SELECT DISTINCT tblRooms.roomID
FROM tblRooms
WHERE ((tblReservations.[dateOut] >= #3/3/2017#)
AND (#3/9/2017# >= tblReservations.[dateIn])));
Obtengo retornos inconsistentes. Estas fechas excluirán la habitación 110, como deberían. Otras entradas de prueba (# 3/4/2017 # y # 3/10/2017 #, # 4/1/2017 # y # 4/14/2017 #) no lo harán. He probado combinaciones de "DONDE NO (...", "DONDE Existe () = Falso", etc.
Trabajo en una red muy restrictiva, donde no puedo introducir plantillas a voluntad; mis únicas opciones cuando creo una base de datos son "En blanco" y "Web", así que tengo que hacer las mías en esto. Agradezco cualquier ayuda.
¿Puedes probar lo siguiente?
SELECT DISTINCTROW tblRooms.roomID, tblRooms.room
FROM tblRooms
WHERE NOT Exists (
SELECT 1
FROM tblReservations
WHERE
tblReservations.fkRoom = tblRooms.roomID
AND ((tblReservations.[dateOut] >= #3/3/2017#)
AND (#3/9/2017# >= tblReservations.[dateIn])));
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras