我有一个简单的教室预订系统,有两个表:
房间:
1. id
2. name
3. localisation
日历:
1. id
2. idroom
3. year
4. month
5. days
天是一个31个字符的字符串(每天1个字符)。人物可以是:“0”免费;第一步预订“1”;被占用的“3”
日历是在需要的时候创建的,所以我的问题是当我要求没有被占用的教室时,要在我检查的期间内没有日历条目的教室。 例如,课堂1从2013年12月1日至2013年2月3日被占用,我没有更多的入场券 在我的课堂日历表中。如果我要求从2013年12月1日到2013年12月4日预订,我不知道如何在我的结果中使用classroom1。月也可以是零和年。 我尝试左连接,“是空”但没有成功。
这是我的请求的第一部分,但是在此期间没有显示“没有日历的房间”:
SELECT DISTINCT room.id
FROM room LEFT JOIN
calendar
ON room.id=calendar.idroom
WHERE (calendar.year=2013 AND calendar.month=12 and calendar.days like "0000%")
感谢您的帮助。
答案 0 :(得分:0)
问题是where
子句使用calendar
表,因此它正在撤消left join
的效果。您可以通过将逻辑混合到on
子句中来解决此问题:
SELECT DISTINCT room.id
FROM room LEFT JOIN
calendar
ON room.id=calendar.idroom and
(calendar.year=2013 AND calendar.month=12 and calendar.days like "0000%")