2015-09-10 47 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子句 –

相关问题