我对酒店预订系统有点麻烦。我无法确定哪些房间在哪个日期可用。我会在这里简化表格,这样你就可以得到我想要做的事情。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
。显然,我无法搜索它,因为此刻没有任何内容,即使有,也会列出所有不可用的房间(当前预订),所以我认为我可以比较ROOMS
表和BOOKINGS
这样的桌子,并试图通过这种方式获得一个空房间(ID)。
SELECT RoomID FROM ROOMS
WHERE RoomType = 'Single' AND NOT EXISTS
(SELECT RoomID FROM BOOKINGS WHERE CheckOut >= '2013-12-02'
AND CheckIn <= '2013-12-07')
AND RoomType = 'Single'
AND Available = 'Yes')
这将返回ROOMS表中的所有单个房间。
示例:预订2013-12-01之前的单间(1号),直到2013-12-08。如果我在2013-12-07之前尝试使用2013-12-02的当前逻辑进行预订,则返回第1号房间可用。任何人都有想法如何做到这一点?尽可能简单。
我在这里使用了一个简化的命名约定,以使它更具可读性。
你为什么要保持RoomType两个表中?看起来像纯粹属于房间关系的东西,与预订无关。 – Tobberoth
因为我必须根据RoomType和签入/日期筛选结果来查找可用房间。 – user3041664
为什么?你已经有RoomID,为什么你需要过滤RoomType? – Tobberoth