我有两张桌子:___Rooms
:
|--------|------------|
| ROO_Id | ROO_Status |
|--------|------------|
| 47 | active |
| 48 | active |
| 49 | active |
|--------|------------|
___Availabilities
:|--------|------------|------------|------------|
| AVA_Id | AVA_RoomId | AVA_Date | AVA_Status |
|--------|------------|------------|------------|
| 1 | 47 | 2019-02-25 | Open |
| 2 | 48 | 2019-02-26 | Open |
| 4 | 47 | 2019-02-28 | Close |
| 5 | 47 | 2019-02-25 | Open |
|--------|------------|------------|------------|
我想得到这两个表的一系列日期的信息。
所以我的问题是:
SELECT ROO_Id, AVA_Id, AVA_Date, AVA_Status
FROM ___Rooms
LEFT JOIN ___Availabilities
ON ___Rooms.ROO_Id = ___Availabilities.AVA_RoomId
WHERE ROO_Status!="inactive"
AND AVA_Date BETWEEN "2019-02-24" AND "2019-03-10"
ORDER BY ROO_Id ASC
问题是查询不接受所有
___Rooms
行。例如,Room #49
中没有记录,但我需要在最终结果中有它。你知道为什么吗?
谢谢。
最佳答案
使用左联接是正确的,但是通过过滤where
子句中的AVA_Date列,可以排除AVA_Date为空的任何行。
将过滤器移到on
子句,您的左连接将按预期工作
SELECT ROO_Id, AVA_Id, AVA_Date, AVA_Status
FROM ___Rooms
LEFT JOIN ___Availabilities
ON ___Rooms.ROO_Id = ___Availabilities.AVA_RoomId
AND AVA_Date BETWEEN "2019-02-24" AND "2019-03-10"
WHERE ROO_Status!="inactive"
ORDER BY ROO_Id ASC
关于php - 两个表之间的联接不会返回表之间没有链接的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54857713/