我有下表,可以订位
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/