SQL LEFT JOIN返回0而不是NULL

时间:2009-06-24 10:54:06

标签: sql null left-join

我想加入两个表,计算每种类型的记录数。如果左表中没有该类型的记录,我希望返回0,而不是null。

我该怎么做?

7 个答案:

答案 0 :(得分:15)

使用:

ISNULL(count(*), 0)

答案 1 :(得分:11)

MsSQL为{p> 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)

查看SQL Server中的IsNullSybase。在Oracle中使用NVL

答案 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;

对我有用。