我對酒店預訂系統有點麻煩。我無法確定哪些房間在哪個日期可用。我會在這裏簡化表格,這樣你就可以得到我想要做的事情。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