我正在尝试运行查询以拉出可用客房,并且它加入了预订表以查看给定期间(开始和结束日期)的可用客房。我在这里画了一个空白,我认为这是一个非常简单的查询,我只是想不出创建它的最佳方法。

到目前为止,我需要解决的问题

   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/

10-12 16:27