2017-05-26 64 views
0

如果users表中的记录不存在于securitydeposits表中,我希望此查询返回0的总和为totalCOALESCE不适用于这种情况。我将如何去做这件事?如果没有找到记录,则返回总和0 mysql

SELECT users.`email`, 
    COALESCE(SUM(securitydeposits.`amount_paid`),0) AS total 
FROM `users` 
LEFT JOIN `securitydeposits` 
    ON securitydeposits.user=users.email 
GROUP BY securitydeposits.`user` 
ORDER BY `total` DESC 

回答

0

我猜你GROUP BY正在改变OUTER JOININNER JOIN

尝试改变GROUP BY securitydeposits.userGROUP BY users.email

0

我想补充什么@Vatev说,你不能使用s.usergroup by,因为left join会给你nulls.user不与u.email匹配。 另外如果你想在select子句中使用email,你还需要group by它也能得到正确的结果。

也尝试使用alias作为最佳实践,因此您可以在查询的其余部分引用它们。

SELECT u.email 
,COALESCE(SUM(s.`amount_paid`),0) 
AS total 
FROM `users` u 
    LEFT JOIN `securitydeposits` s 
ON s.user=u.email 
GROUP BY u.email 
ORDER BY `total` DESC 
相关问题