我有以下声明,并且它工作正常,除了如果第二个表没有第一个表的引用项,它将不返回任何结果。
我需要的是将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;
答案 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。