2016-10-29 84 views
0

我有三个表: 1日 - 包含列日 2本书 - 包含列室,日期和姓 3人 - 包含列姓上市行不仅当条件满足

我能得到日期范围内特定日期的房间中有人的日期。

SELECT date, IFNULL(surname, 'ghost') 
 
FROM book JOIN dates ON book.date=dates.date JOIN people ON people.surname=book.surname 
 
WHERE room = 113 
 
AND date BETWEEN '2015-01-01' AND '2015-01-07' 
 

 
+------------+-----------+ 
 
| Date  | Surname | 
 
+------------+-----------+ 
 
| 2015-01-02 | Surname 1 | 
 
| 2015-01-05 | Surname 2 | 
 
+------------+-----------+

我如何返回日期的完整列表,包括那些在一个房间所以从给定的范围内的所有打印日期,如果在指定的房间里没有人在那里有没有人,然后'幽灵'被打印,而不是?

+1

“日期”表中有什么? –

+0

只有1列的日期格式为yyyy-mm-dd,基本上是日历 – tabaluga

回答

0

您需要使用LEFT JOIN

SELECT dates.date, IFNULL(book.surname, 'ghost') 
FROM dates 
LEFT JOIN book 
    ON book.date=dates.date 
    AND book.room = 113 
-- LEFT JOIN people ON people.surname=book.surname 
WHERE dates.date BETWEEN '2015-01-01' AND '2015-01-07' 

注意book.room = 113需求为开启子句。在WHERE子句中使用它会将LEFT JOIN转换为INNER JOIN。