【问题标题】:MySQL - Display data between 2 dates using INNER JOINMySQL - 使用 INNER JOIN 显示两个日期之间的数据
【发布时间】:2015-09-10 03:50:29
【问题描述】:

如何显示不在 tblreserve 表的 checkInDate 和 checkOutDate 列范围内的房间?

客户

customerID | Fname | Lname
1          | John  | Smith

tbl预订

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

房间

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

tblroom状态

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

房间类型

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

我尝试了 INNER JOIN,但不是在 tblroom 表上显示在两个输入日期范围内未被占用的所有房间,而是仅在 tblreserve 不属于特定日期范围的表。即“2015-09-12”和“2015-09-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'

【问题讨论】:

  • 提供的架构和查询中使用的架构不匹配
  • 对不起。已更正。

标签: mysql sql date inner-join


【解决方案1】:

它应该适合你:

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

【讨论】:

    【解决方案2】:

    试试这个

    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')
    

    【讨论】:

    • 尝试在 where 子句中添加“tblreservation.checkInDate between '2015-09-12' AND '2015-09-13'”
    猜你喜欢
    • 2020-07-21
    • 2015-05-21
    • 1970-01-01
    • 2020-05-25
    • 2021-10-09
    • 2016-03-25
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    相关资源
    最近更新 更多