我正在尝试运行查询以提取可用房间,并且它会加入预订表以查看给定时段(开始日期和结束日期)的可用房间。我在这里画一个空白,我认为这是一个非常简单的查询,我只是想不出创建它的最佳方法。
到目前为止我需要修复的内容
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子句的预订的房间的结果,即使可以在日期范围内进行预订。
答案 0 :(得分:1)
我会使用not exists
谓词来做到这一点,我觉得这很直观:
SELECT *
FROM room
WHERE NOT EXISTS (
SELECT *
FROM reservation
WHERE room.id = room_id
AND
:startdate < enddate
AND
startdate < :enddate)
逻辑说返回在给定日期之间不存在任何相关保留的所有房间。