[英]In an SQL statement if nothing is found for a specific query, return an entry
這似乎有點令人費解。 但是,如果您可以快速閱讀本文中的答案: 組合兩個SQL查詢PDO
這是我正在使用的示例sqlfiddle: http ://sqlfiddle.com/#!2/c4983/3
所以這里應該發生的是在我的sql查詢中:
SELECT r.RoomID AS RoomID,
RoomName,
NumOfRooms,
MaxPeopleExistingBeds,
MaxExtraBeds,
MaxExtraPeople,
CostPerExtraPerson,
MaximumFreeChildren,
IncludeBreakfast,
MinRate
FROM Rooms r
JOIN RoomDetails rd
ON r.RoomID = rd.RoomID
JOIN (
SELECT b.RoomID,
AccommodationID,
count(b.RoomID) AS Bookings
FROM Booking b
WHERE ArriveDate >= :aDate
AND DepartDate <= :dDate
GROUP BY RoomID
) t
ON t.AccommodationID = r.AccommodationID
WHERE r.AccommodationID = :aid
AND t.Bookings < NumOfRooms
GROUP BY RoomName
目前,它會檢查每個房間的預訂量是否已滿。 然后顯示它們。 但是,如果容量為1,則沒有預訂。 它不會顯示房間。
是否可以通過解決此問題的方式來重建此語句?
您使用AccommodationID
加入的第一件事是,您忽略了Booking
表的房間ID,這給您錯誤的房間預訂計數,您還需要加入房間ID,並且還需要使用LEFT
連接,所以如果預訂沒有任何回報則表示您的房間可用,當與ON( t.AccommodationID =r.AccommodationID AND r.RoomID = t.RoomID)
您的預訂欄將為空(即未對此房間進行預訂),因此您需要附加條件檢查預訂是否為空,然后返回此房間,因為它可以接待客人
SELECT r.RoomID AS RoomID,
RoomName,
NumOfRooms,
t.Bookings,
MaxPeopleExistingBeds,
MaxExtraBeds,
MaxExtraPeople,
CostPerExtraPerson,
MaximumFreeChildren,
IncludeBreakfast,
MinRate
FROM Rooms r
LEFT JOIN RoomDetails rd
ON r.RoomID = rd.RoomID
LEFT JOIN (
SELECT b.RoomID,
AccommodationID,
COALESCE(count(b.RoomID),0) AS Bookings
FROM Booking b
WHERE ArriveDate >= '2014-02-26'
AND DepartDate <= '2014-03-10'
GROUP BY RoomID
) t
ON( t.AccommodationID = r.AccommodationID
AND r.RoomID = t.RoomID)
WHERE r.AccommodationID = 1
AND (t.Bookings < NumOfRooms OR t.Bookings IS NULL)
GROUP BY RoomName;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.