2015-09-10 49 views
1

如何顯示不在tblreserve表的checkInDate和checkOutDate列範圍內的房間?MySQL - 使用INNER JOIN在兩個日期之間顯示數據

tblcustomer

customerID | Fname | Lname 
1   | John | Smith 

tblreservation

reservationID | customerID | reserveDate | checkInDate | checkOutDate 
1    | 1   | 2015-09-09 | 2015-09-10 | 2015-09-11 

tblroom

roomID | roomTypeID | roomStatusID | roomNumber | floorNumber 
1  | 1   | 1   | 101  | 1 
2  | 2   | 1   | 102  | 1 
3  | 3   | 1   | 103  | 1 

tblroomreserve

roomID | reservationID 
1  | 1 

tblroomstatus

roomStatusID | roomStatus 
1   | vacant 
2   | occupied 
3   | reserved 

tblroomtype

roomTypeID | roomType 
1   | Single Room 
2   | Double Room 
3   | Twin Room 

我試過INNER JOIN但不是顯示在未對一系列佔領的兩個輸入的日期的tblroom表中的所有房間,只有它顯示不在特定日期範圍內的tblreserve表中的房間。即 '2015年9月12日' 和 '2015年9月13日'

SELECT 
    `tblroom`.`roomNumber` 
    , `tblroomtype`.`roomTypeDescription` 
    , `tblroomtype`.`roomRate` 
FROM 
    `hotelreservation`.`tblreservation` 
INNER JOIN `hotelreservation`.`tblcustomer` 
    ON (`tblreservation`.`customerID` = `tblcustomer`.`customerID`) 
INNER JOIN `hotelreservation`.`tblroomreservation` 
    ON (`tblroomreservation`.`reservationID` = `tblreservation`.`reservationID`) 
INNER JOIN `hotelreservation`.`tblroom` 
    ON (`tblroomreservation`.`roomID` = `tblroom`.`roomID`) 
INNER JOIN `hotelreservation`.`tblroomstatus` 
    ON (`tblroom`.`roomStatusID` = `tblroomstatus`.`roomStatusID`) 
INNER JOIN `hotelreservation`.`tblroomtype` 
    ON (`tblroom`.`roomTypeID` = `tblroomtype`.`roomTypeID`) 
    AND NOT tblreservation.`checkInDate` >= '2015-09-12' AND tblreservation.`checkOutDate` <= '2015-09-13' 
+0

提供用於查詢的模式和模式不匹配 –

+0

對不起。更正它。 –

回答

4

它應該爲你工作:

SELECT 
    tblroom.roomNumber, 
    tblroomtype.roomTypeDescription, 
    tblroomtype.roomRate 
FROM tblroom 
INNER JOIN tblroomtype 
    ON tblroom.roomTypeID = tblroomtype.roomTypeID 
WHERE roomID NOT IN (SELECT 
    tblroomreservation.roomID 
FROM tblreservation 
INNER JOIN tblroomreservation 
    ON (tblroomreservation.reservationID = tblreservation.reservationID) 
WHERE checkInDate BETWEEN '2015-09-12' AND '2015-09-13'); 

http://sqlfiddle.com/#!9/54d2a/5

0

試試這個

SELECT 
    `tblroom`.`roomNumber` 
    , `tblroomtype`.`roomTypeDescription` 
    , `tblroomtype`.`roomRate` 
FROM 
    `hotelreservation`.`tblreservation` 
INNER JOIN `hotelreservation`.`tblcustomer` 
    ON (`tblreservation`.`customerID` = `tblcustomer`.`customerID`) 
INNER JOIN `hotelreservation`.`tblroomreservation` 
    ON (`tblroomreservation`.`reservationID` = `tblreservation`.`reservationID`) 
INNER JOIN `hotelreservation`.`tblroom` 
    ON (`tblroomreservation`.`roomID` = `tblroom`.`roomID`) 
INNER JOIN `hotelreservation`.`tblroomstatus` 
    ON (`tblroom`.`roomStatusID` = `tblroomstatus`.`roomStatusID`) 
INNER JOIN `hotelreservation`.`tblroomtype` 
    ON (`tblroom`.`roomTypeID` = `tblroomtype`.`roomTypeID` 
    AND tblreservation.`checkInDate` between '2015-09-12' AND '2015-09-13') 
+0

返回零行。 –

+0

嘗試在'2015-09-12'和'2015-09-13'之間添加「tblreservation.checkInDate」到where子句 –

相關問題