我有两张桌子:
___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/

10-10 06:40