1

我有一个简单的教室预订系统,有两张桌子:

房间 :

 1. id
 2. name
 3. localisation

日历 :

 1. id
 2. idroom
 3. year
 4. month
 5. days

days 是一个 31 个字符的字符串(每天 1 个字符)。字符可以是:“0”免费;“1”为第一步预订;“3”表示占用

日历是在需要时创建的,所以我的问题是当我要求未占用的教室时,要获取在我检查期间没有日历条目的教室。例如,教室 1 从 2013 年 1 月 12 日到 2013 年 3 月 2 日被占用,我的日历表中没有更多关于该教室的条目。如果我要求从 2013 年 1 月 12 日到 2013 年 4 月 12 日的预订,我不知道如何在结果中包含教室 1。月份可以为空,年份也可以。我尝试左连接,并且“为空”但没有成功。

这是我请求的第一部分,它有效,但在此期间不显示“没有日历的房间”:

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%") 

谢谢您的帮助。

4

1 回答 1

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%") 
于 2013-04-17T15:10:25.473 回答