我正在尝试运行查询以拉出可用客房,并且它加入了预订表以查看给定期间(开始和结束日期)的可用客房。我在这里画了一个空白,我认为这是一个非常简单的查询,我只是想不出创建它的最佳方法。
到目前为止,我需要解决的问题
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)
逻辑上说,返回在给定日期之间没有任何相关预订的所有房间。
关于mysql - Mysql:日期比较和联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28819841/