SQL酒店预订系统

时间:2013-11-27 12:21:43

标签: sql

我在酒店预订系统方面遇到了一些麻烦。我无法确定哪些房间在哪个日期可用。我会在这里简化表格,这样你就可以得到我想要做的事情。

Table 1 (ROOMS) :
RoomID,
RoomType (Single, Double etc)

Table 2 (BOOKINGS)
BookingID,
RoomID,
Available (Yes/No),
CheckInDate,
CheckOutDate,
RoomType

我正在尝试在BOOKINGS表格中搜索可用的room(ID),具体取决于checkin, checkout and roomtype。显然我无法搜索它,因为此刻没有任何内容,即使有,也会列出所有不可用的房间(当前预订)所以我认为我可以比较{{ 1}} table和ROOMS这样的表,并尝试以这种方式获得一个空房(ID)。

BOOKINGS

这将返回ROOMS表中的所有单个房间。

示例:预订2013-12-01至2013-12-08期间的单人间(1号)。如果我尝试使用2013-12-02至2013-12-07的当前逻辑进行预订,则会返回1号房间可用。任何人都知道如何做到这一点?尽可能简单。

我在这里使用了简化的命名约定,以使其更具可读性。

1 个答案:

答案 0 :(得分:0)

您需要关联子查询。 目前,EXISTS子查询与ROOMS上的外部查询没有任何关系。 因此,您将获得所有单个房间或NONE,具体取决于EXISTS在独立运行时是真还是假。

这样的事情应该有效:

SELECT RoomID FROM ROOMS R
WHERE RoomType = 'Single' AND NOT EXISTS 
(SELECT * FROM BOOKINGS 
 WHERE RoomID = R.RoomID
    AND CheckOutDate >= '2013-02-02'
    AND CheckInDate <= '2013-02-07'
)

我在这里做了一个SQLFiddle示例:http://sqlfiddle.com/#!2/b0ff3/6