当主表中没有数据时,使用LEFT JOIN获取计数会返回零计数

时间:2016-10-10 13:58:01

标签: mysql left-join

我正在尝试使用LEFT JOIN获取用户的应用数量。无论用户是否有应用程序,它都需要返回用户,但是当没有用户时,查询返回一个包含0个应用程序的空记录。

SELECT u.*, COUNT(a.id) AS apps_working  
FROM users u 
LEFT JOIN apps a ON (u.id = a.user_id)
WHERE u.company_id = :company_id 
AND u.account_type = 3

编辑:当没有用户在场时,结果如下所示:

Array
(
[0] => Array
    (
        [id] => 
        [company_id] => 
        [user_login] => 
        [user_password] => 
        [first_name] => 
        [last_name] => 
        [user_hash] => 
        [user_slug] => 
        [date_joined] => 
        [last_login] => 
        [account_type] => 
        [status] => 
        [apps_working] => 0
    )

)

3 个答案:

答案 0 :(得分:0)

试试这段代码:

SELECT u.*, COUNT(IFNULL(a.id,0)) AS apps_working  
    FROM users u 
    LEFT JOIN apps a ON (u.id = a.user_id)
    WHERE u.company_id = :company_id 
    AND u.account_type = 3

答案 1 :(得分:0)

这是左连接查询。因此,如果没有用户满足company_id和account_type的条件,则没有加入的东西,结果没有。

答案 2 :(得分:0)

这是一个始终返回值的查询,因为count(*)将始终返回一些内容。如果您不想看到它,请将case语句添加到trap 0并返回null。