SQL 在日期和特定时间的免费聊天室



我已经阅读了一些关于查找可用房间的文章,但是我无法让我的版本正常工作。

有人可以看看我的 SQL,也许可以阐明我的问题。

房间TBL(房间号,房间名称)课程TBL(课程ID,房间ID,员工ID,时间段)DatesTBL(DateID, LessonID, startDate, endDate)

我想查找特定时间段的可用房间,介于开始日期和结束日期之间。(它是学校的集体预订系统)

我试过了

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 个房间根本没有使用),我希望我已经正确解释了这个问题。

毫无疑问,我错过了一些东西,谢谢。

我想我已经理解了您要做什么,但是您正在尝试从LessonsTBL中选择房间号(这不是任何表中的字段)。我在这个答案中做了很多假设,所以如果我猜错了,请澄清。

您似乎正在寻找一个在"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')

除非您需要房间名称,否则您不需要房间TBL。

最新更新