【问题标题】:SQL - How to includes row with zero results with a WHERE conditionSQL - 如何使用 WHERE 条件包含零结果的行
【发布时间】:2019-04-17 09:43:16
【问题描述】:

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

基本上,我有两张桌子:

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

  • registered_hotels 列出所有具有相应酒店、日期和用户 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 条件似乎会释放所有空行时,我找到了实际显示零的答案。

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

【问题讨论】:

    标签: mysql sql count left-join


    【解决方案1】:

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

    【讨论】:

    • 嗯,这很快,效果很好!非常感谢您的回答
    • 当然,你太快了,我得等 10 分钟 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 1970-01-01
    • 2021-04-25
    相关资源
    最近更新 更多