38

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

我怎样才能做到这一点?

4

7 回答 7

24

采用:

ISNULL(count(*), 0)
于 2009-06-24T10:55:26.343 回答
19

您可以使用“案例”

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
于 2012-11-20T06:51:06.250 回答
12

我不确定我是否理解了你的确切问题,但是在左连接的 sqlserver 中,如果你的查询是这样的,你会得到一个计数为 0:

select t1.id, count(t2.id)
from table1 t1
left outer join table2 t2
on t1.id = t2.id
group by t1.id
于 2009-06-24T11:08:33.743 回答
11

ISNULL(nullable, value_if_null)对于 MsSQL,COALESCE(nullable1, nullable2, ..., value_if_null)对于 MySQL。

编辑: 据我所知,COALESCE两者都适用,所以我会选择它来替换NULL列。

现在我认为COUNT()ingNULL0也会在 MySQL 中返回,所以我同意 Rashmi。你能告诉我们查询和想要的结果吗?

于 2009-06-24T10:57:16.887 回答
8
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;

这对我行得通。

于 2019-03-20T09:47:23.003 回答
7

COALESCE 比 ISNULL 或 NVL 更具交叉兼容性(它适用于 MSSQL、Oracle、MySQL、Derby 等)。但我不确定性能差异。

于 2009-06-24T11:32:06.910 回答
4

查看SQL Server 和Sybase中的IsNull。在 Oracle 中使用NVL 。

于 2009-06-24T10:55:10.197 回答