簡體   English   中英

在SQL語句中,如果找不到特定查詢的任何內容,則返回一個條目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM