我有下表,可以预订
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;
我主要是在使用体系结构来检索未占用的运行,因此我可以查看两个日期之间的可用运行,也许是一个布尔值?任何建议。
答案 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;