我想要将两个表联接起来,并计算每个类型的记录数。如果左表中没有该类型的记录,我希望返回 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
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;
那对我来说没问题。
对于MsSQL,使用ISNULL(可空对象,如果为空则返回的值)
,对于MySQL,使用COALESCE(可空对象1,可空对象2,...,如果为空则返回的值)
。
编辑:
据我所知,COALESCE
在两者中都适用,因此我会选择它来替换NULL
列。
现在我认为,在MySQL中,COUNT()
的NULL
值也返回0
,所以我同意Rashmi的观点。您能展示一下查询和期望的结果吗?
我不确定我是否完全理解了你的问题,但在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
COALESCE比ISNULL或NVL更具跨兼容性(它可以在MSSQL、Oracle、MySQL、Derby等平台上使用)。但我不确定它们之间的性能差异。