首页 > 解决方案 > 如果使用左连接找不到记录,如何将记录计数为零?

问题描述

我正在尝试使用左连接获取计数为 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

标签: mysqlsqlleft-join

解决方案


根据@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。


推荐阅读