mysql - 如果使用左连接找不到记录,如何将记录计数为零?
问题描述
我正在尝试使用左连接获取计数为 0 的记录。我正在使用 MySQL 数据库。
门户表:
SELECT * FROM portal;
id name
-----------
1 Barnet
2 Brexley
3 Balby
应用表:
id portal_id updated
-----------------------------
1 1 2011-08-20
2 1 2011-08-20
3 1 2011-08-21
4 2 2011-08-21
5 2 2011-08-20
6 2 2011-08-20
7 2 2011-08-21
8 2 2011-08-21
这是我的查询:
SELECT
portal.name, COALESCE(COUNT(application.id), 0) AS count
FROM
portal
LEFT JOIN
application ON application.portal_id = portal.id
GROUP BY portal.name;
下面是输出SQL Fiddle:
Name Count
--------------
Balby 0
Barnet 3
Brexley 5
但是当我包含 WHERE 子句时,我没有得到计数为 0 的记录。
SELECT
portal.name, COALESCE(COUNT(application.id), 0) AS count
FROM
portal
LEFT JOIN
application ON application.portal_id = portal.id
WHERE
application.updated > '2011-08-20'
GROUP BY portal.name;
输出SQL 小提琴 2:
Name Count
--------------
Barnet 1
Brexley 3
解决方案
根据@MadhurBhaiya 的评论,不要使用WHERE
,而是将测试application.updated > '2011-08-20'
置于JOIN
条件中。
SELECT
portal.name, COUNT(COALESCE(application.id, 0) AS count
FROM
portal
INNER JOIN
application ON (
application.portal_id = portal.id
AND
application.updated > '2011-08-20'
)
GROUP BY portal.name;
注意:我没有测试代码,也不会说SQL。
推荐阅读
- batch-file - 批处理脚本:将数组值与数值进行比较
- django - 将“with”模板标签与“if”模板标签结合使用
- c++ - 使用 C++ STL 的数组实现
- jquery - JQuery使元素在div内可拖动和排序并溢出
- android - 如何从一个活动中获取选定的图像到来自firebase的第二个活动
- php - 如果我知道 MySQL 中同一行中其他列的值,如何获取列的值?
- uml - 组件图
- quadratic-programming - 如何线性化二次目标函数
- css - 在不同的 scss 文件中找不到 mixin
- json - 如何遍历 wso2 esb proxy-service 接收到的 json 有效负载