我正在尝试运行查询以拉出可用客房,并且它加入了预订表以查看给定时间段(开始和结束日期)的可用客房。我在这里画了一个空白,我认为这是一个非常简单的查询,我只是想不出创建它的最佳方法。
到目前为止,我需要解决的问题
SELECT *
FROM room
LEFT JOIN reservation ON room.id = reservation.room_id
WHERE reservation.id is null or
:startdate > reservation.enddate or
:enddate < reservation.startdate
我上面的查询将返回具有多个预订的房间的结果,这些预订即使在日期范围内可能有预订,也可能满足where子句。
我会使用not exists
我觉得很直观的谓词来做到这一点:
SELECT *
FROM room
WHERE NOT EXISTS (
SELECT *
FROM reservation
WHERE room.id = room_id
AND
:startdate < enddate
AND
startdate < :enddate)
逻辑是返回给定日期之间没有任何相关预订的所有房间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句