鑑於這種模式:Group By子句是否需要加入?
Hotel(hotelNo, hotelName, city) #hotelNo is PK
Room (roomNo, hotelNo, type, price) #(roomNo, hotelNo) is PK
Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) #(hotelNo,guestNo, dateFrom) is PK
Guest(guestNo, GuestName, GuestAddress) #guestNo is PK
問:什麼是從空閒的客房收入損失在今天每家酒店?
看着我結束了一個非常不同的答案(更復雜,但解決方案基本上我發現all rooms in hotels
並計算Difference
集合運算符對all rooms which are booked today
,然後計算出的價格與group by子句剩下的房間 - 我米甚至不知道它會工作,但在紙上看起來有效)。但是,看看示例解決方案:
SELECT hotelNo, SUM(price) FROM Room r
WHERE roomNo NOT IN
(SELECT roomNo FROM Booking b, Hotel h
WHERE (dateFrom <= CURRENT_DATE AND
dateTo >= CURRENT_DATE) AND
b.hotelNo = h.hotelNo)
GROUP BY hotelNo;
爲什麼我們需要加入預訂和酒店。我看到我們基於b.hotelNo=h.hotelNo
基於b.hotelNo=h.hotelNo
加入這兩個關係,但查看架構,Booking提供了RoomNo(已預訂)的詳細信息,並提供關於哪個酒店和日期的信息......當然,這是我們需要處理的所有信息一個Group By子句並實現我們想要的結果?還是我誤會了?
首先從未使用隱式連接;他們是一種SQL反模式。 – HLGEM 2015-02-06 20:22:32
如果多家酒店的房間號碼相同,根據我的經驗,您的查詢沒有任何意義。實際上,您的表格結構沒有任何意義,除非您將RoomNo和HotelNo用作Room表格中的複合PK。 – HLGEM 2015-02-06 20:29:48
@HLGEM感謝您的提示。我會考慮到這一點(儘管這直接來自答卷)。我還在我的模式中添加了鍵,是的,Room是一個複合鍵。 – gudthing 2015-02-06 20:37:35