首页 > 解决方案 > SQL - 如何使用 WHERE 条件包含零结果的行

问题描述

我有一个查询,要选择在所有可用日期预订特定酒店的人数。

基本上,我有两张桌子:

诀窍是如果没有人为特定日期预订酒店,我想显示“0”。

这是我的查询:

SELECT dates_event.date_full, count(registered_hotels.id_registered)
FROM dates_event 
    LEFT JOIN registered_hotels ON dates_event.date_id = registered_hotels.date_id
    WHERE registered_hotels.idhotel='1'
    GROUP by dates_event.date_full

它显示这个:

+-------------+----------------------------------------+
|  date_full  | count(registered_hotels.id_registered) |
+-------------+----------------------------------------+
| 2019-09-15  |                                      1 |
| 2019-09-16  |                                      1 |
+-------------+----------------------------------------+

虽然我想显示这个:

+-------------+----------------------------------------+
|  date_full  | count(registered_hotels.id_registered) |
+-------------+----------------------------------------+
| 2019-09-15  |                                      1 |
| 2019-09-16  |                                      1 |
| 2019-09-17  |                                      0 |
+-------------+----------------------------------------+

当我有一个特定的 WHERE 条件似乎会释放所有空行时,我找到了实际显示零但没有的答案。

关于如何实现这一目标的任何想法?

标签: mysqlsqlcountleft-join

解决方案


把你registered_hotels.idhotel='1'放在条件而不是在哪里

SELECT dates_event.date_full, count(registered_hotels.id_registered)
FROM dates_event 
    LEFT JOIN registered_hotels ON dates_event.date_id = registered_hotels.date_id
    and registered_hotels.idhotel='1'
    GROUP by dates_event.date_full

推荐阅读