SQL-如何在WHERE条件下包含结果为零的行

时间:2019-04-17 09:43:16

标签: mysql sql count left-join

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

基本上,我有两个表:

  • dates_event ,其中列出了我有3个日期的所有可用日期

  • 已注册的酒店 ,其中列出了所有具有相应酒店,日期和用户ID的人的注册信息

诀窍是,如果没有人预订特定日期的酒店,我想显示“ 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条件(似乎让所有空行都消失了)时,什么都不显示。

关于如何实现此目标的任何想法吗?

1 个答案:

答案 0 :(得分:4)

将您的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