我已经阅读了一些关于寻找可用房间的文章,但是我无法让我的版本工作。
有人可以查看我的SQL,也许可以解释一下我的问题。
表
RoomTBL(RoomNo, RoomName) LessonsTBL(LessonID, RoomID, StaffID, TimeSlot) DatesTBL(DateID, LessonID, startDate, endDate)
我想在StartDate和endDate之间的特定TimeSlot上找到可用的房间。 (它是学校的预订系统)
我试过了
SELECT RoomNumber
FROM RoomTBL
WHERE RoomNumber NOT IN (SELECT RoomNumber
FROM LessonsTBL LT
JOIN DatesTBL DT ON LT.LessonID = DT.LessonID
Where(DT.startDate <= '2016-03-21' AND DT.endDate >= '2016-03-21')
OR (DT.startDate < '2016-04-21' AND DT.endDate >= '2016-04-21')
OR ('2016-03-21' <= DT.startDate AND '2016-04-21' >= DT.startDate)
AND LT.TimeSlot = 1)
但它没有返回任何房间(我有6个房间完全没有使用)我希望我已正确解释了这个问题。
毫无疑问我错过了什么,谢谢。
答案 0 :(得分:1)
我想我已经理解了你要做的事情,但是你试图从LessonsTBL中选择RoomNumber(这不是任何表中的字段)。我在这个答案中做了很多假设,所以请澄清我猜错了。
您似乎正在寻找在“2016-03-21”和“2016-04-21”之间的任何日期都没有预订第一个时段的房间
SELECT RoomID
FROM LessonsTBL
WHERE RoomID NOT IN
(SELECT RoomID
FROM LessonsTBL LT JOIN DatesTBL ON LT.LessonID = DT.LessonID
WHERE LT.TimeSlot = 1 AND (DT.startDate BETWEEN '2016-03-21' AND '2016-04-21') OR (DT.endDate BETWEEN '2016-03-21' AND '2016-04-21')
除非您需要RoomName,否则您不需要RoomTBL。