为什么使用union all的查询不起作用

Ces*_*sar 1 mysql sql select

我有以下查询:

SELECT a.status, count(a.status) FROM
(SELECT 'Delivered' AS status
UNION ALL SELECT 'Buffered'
UNION ALL SELECT 'Not Delivered'
UNION ALL SELECT 'Not Reported') a
LEFT JOIN 
bulk_sms_numbers
ON a.status = bulk_sms_numbers.delivery_status
WHERE bulk_sms_id = 52
GROUP BY a.status;
Run Code Online (Sandbox Code Playgroud)

以下结果:

+-----------+-----------------+
|  status   | count(a.status) |
+-----------+-----------------+
| Buffered  |              10 |
| Delivered |            3200 |
+-----------+-----------------+
Run Code Online (Sandbox Code Playgroud)

我希望结果集包含union all查询中列出的所有可能状态

我需要的示例输出.

+---------------+-----------------+
|    status     | count(a.status) |
+---------------+-----------------+
| Buffered      |              10 |
| Delivered     |            3200 |
| Not Delieverd |               0 |
| Not Reported  |               0 |
+---------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

我正在使用MySql

Joh*_*Woo 5

将条件从WHERE子句移动到,ON因此过滤将在加入时进行,而不是在最终结果列表中进行.

SELECT a.status, count(a.status) 
FROM
    (
        SELECT 'Delivered' AS status
        UNION ALL SELECT 'Buffered'
        UNION ALL SELECT 'Not Delivered'
        UNION ALL SELECT 'Not Reported'
    ) a
    LEFT JOIN bulk_sms_numbers
        ON a.status = bulk_sms_numbers.delivery_status AND 
            bulk_sms_id = 52
GROUP BY a.status;
Run Code Online (Sandbox Code Playgroud)