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

标签 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;

我主要在架构上苦苦挣扎以检索未占用的运行,因此我可以查看两个日期之间的可用运行,也许是 bool 值?任何建议。

最佳答案

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

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

关于MySQL查询表获取开始日期和结束日期之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31342279/

相关文章:

sql - WHERE 子句中的 "Conditional Conditions"(应用哪个条件取决于 "mode"标志)

MySQL 版本 5.5.37 : Dropping tables older than 30 days using CURSOR

javascript - 我的 javascript 自定义选择的 onmouseout 问题

mysql - 如何在 mysql 的 select 中使用 inner join?

mysql - 更改 MySQL 中的 max_connect_errors

sql - 如何在单个 MySQL 语句中添加列并使其成为外键?

mysql - 如果 Flask-SQLAlchemy 中的某个数据库失败,则动态连接到不同的数据库

sql - 在 WHERE 与 FROM 中添加过滤器

php - 在 SQL 查询中计算时间

sql - 选择同一列上的两个计数