【发布时间】:2010-11-05 11:27:18
【问题描述】:
我想连接两个表,并计算每种类型的记录数。如果左表中没有该类型的记录,我希望返回 0,而不是 null。
我该怎么做?
【问题讨论】:
-
什么类型的数据库? SQL Server、MySql、Oracle、...
我想连接两个表,并计算每种类型的记录数。如果左表中没有该类型的记录,我希望返回 0,而不是 null。
我该怎么做?
【问题讨论】:
用途:
ISNULL(count(*), 0)
【讨论】:
您可以使用“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
【讨论】:
我不确定我是否理解了你的确切问题,但是在左连接的 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
【讨论】:
ISNULL(nullable, value_if_null) 用于 MsSQL,COALESCE(nullable1, nullable2, ..., value_if_null) 用于 MySQL。
编辑:
有人告诉我,COALESCE 两者都适用,所以我会选择它来替换 NULL 列。
现在我认为 COUNT()ing NULL 值在 MySQL 中也会返回 0,所以我同意 Rashmi。你能告诉我们查询和想要的结果吗?
【讨论】:
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;
这对我有用。
【讨论】:
COALESCE 比 ISNULL 或 NVL 更具交叉兼容性(它适用于 MSSQL、Oracle、MySQL、Derby 等)。但我不确定性能差异。
【讨论】: