MySQL查询表,用于获取开始日期和结束日期之间的数据

时间:2015-07-10 13:40:18

标签: mysql sql select

我有下表,可以预订

CREATE TABLE booking (
    bookingID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    customerID INT,
    runID INT,
    startDate DATETIME,
    endDate DATETIME,
    dateBookedOn TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        PRIMARY KEY (bookingID),
        INDEX idx_start (startDate),
        INDEX idx_end (endDate),
        FOREIGN KEY (runID) REFERENCES RUn(RunID),
        FOREIGN KEY (customerID) REFERENCES customer(CustomerID)
)

然后我有一张跑步表

CREATE TABLE run
(
    RunID INT UNSIGNED NOT NULL AUTO_INCREMENT,
    RunName VARCHAR(15),
    PricePerNight DECIMAL(3,2),
    primary key (RunID)
);

我需要查询表以检索在开始和结束时间之间没有占用的所有runID。

我知道我可以使用以下查询来检索两个日期之间的runID。

select runID 
from booking
where startDate >= '10/07/2015' 
and endDate <= 15/07/2015;

我主要是在使用体系结构来检索未占用的运行,因此我可以查看两个日期之间的可用运行,也许是一个布尔值?任何建议。

2 个答案:

答案 0 :(得分:1)

假设您正在寻找在这些日期之间未预订的运行,您可以将not in运算符与给定查询一起用作子查询:

SELECT *
FROM   run
WHERE  run_id NOT IN (SELECT runID 
                      FROM   booking
                      WHERE  startDate >= '10/07/2015' AND
                             endDate <= '15/07/2015');

答案 1 :(得分:0)

以下代码将显示在这些日期内未预订的房间

select run.runID 
from run  left join booking b on b.runID = run.runID
where startDate >= '10/07/2015' 
and endDate <= 15/07/2015
and b.runID is null;