我想加入两个表,计算每种类型的记录数。如果左表中没有该类型的记录,我希望返回0,而不是null。
我该怎么做?
答案 0 :(得分:15)
使用:
ISNULL(count(*), 0)
答案 1 :(得分:11)
ISNULL(nullable, value_if_null)
,MySQL为COALESCE(nullable1, nullable2, ..., value_if_null)
。
修改强>
据我所知,COALESCE
适用于两者,因此我选择替换NULL
列。
现在我认为COUNT()
NULL
值也会在MySQL中返回0
,所以我同意Rashmi。你能告诉我们查询和想要的结果吗?
答案 2 :(得分:11)
我不确定我是否已理解您的确切问题,但在左侧连接的sqlserver中, 如果您的查询是这样的话,您将得到一个计数:
select t1.id, count(t2.id)
from table1 t1
left outer join table2 t2
on t1.id = t2.id
group by t1.id
答案 3 :(得分:10)
您可以使用“CASE”
SELECT T1.NAME, CASE WHEN T2.DATA IS NULL THEN 0 ELSE T2.DATA END
FROM T1 LEFT JOIN T2 ON T1.ID = T2.ID
答案 4 :(得分:4)
答案 5 :(得分:3)
COALESCE比ISNULL或NVL更具交叉兼容性(它适用于MSSQL,Oracle,MySQL,Derby等)。但我不确定性能差异。
答案 6 :(得分:0)
COALESCE(XXX, 0)
例如
SELECT branch1_id, branch1_name, COALESCE(devnum, 0) FROM
branch1 as S LEFT JOIN view_inner_zj_devnum as B ON S.branch1_id = B.bid1 GROUP BY branch1_id;
对我有用。