sql查询返回0而不是NULL

时间:2010-11-17 03:31:57

标签: sql mysql aggregate-functions

我有以下声明,并且它工作正常,除了如果第二个表没有第一个表的引用项,它将不返回任何结果。

我需要的是将count(p.match_id) AS matchcount作为0

返回
"SELECT c.*, count(p.match_id) AS matchcount 
    FROM ci_address_book c LEFT JOIN ci_matched_sanctions p
    ON c.id = p.addressbook_id 
    GROUP BY p.addressbook_id ORDER BY c.id LIMIT ".$offset.",".$num;

1 个答案:

答案 0 :(得分:1)

这里的第一个问题是您使用的是LEFT JOIN。这意味着即使c中的行与p中的行不匹配,也会返回select c.*, p.* ... where p.addressbook_id = NULL中的所有行。

你的问题。

  

如果第二个表没有第一个表的参考项,它将不返回任何结果

让我用自己的话来改写。

  

如果 p 表没有 c 表的参考项,则不会返回任何结果

执行LEFT JOIN时,“右”表中任何空的内容都将返回NULL值。因此,在这些情况下,matchcount将为“NULL”。 (您可以通过SELECT c.*, COALESCE(COUNT(p.match_id), 0) AS matchcount

进行测试

要显示“0”,请执行以下操作:

COALESCE

{{1}}返回第一个非NULL值。所以当COUNT(p.match_id)为NULL时,你得到0。