SQL LEFT JOIN返回0而不是NULL

Kar*_*arl 23 sql null left-join

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

我怎样才能做到这一点?

cjk*_*cjk 16

使用:

ISNULL(count(*), 0)
Run Code Online (Sandbox Code Playgroud)

  • 如果count(*)在没有记录的情况下返回NULL,那么这将是有效的.但是count(*)返回0.因此count(*)和ISNULL(count(*),0)实际上是相同的. (5认同)

小智 12

你可以用"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
Run Code Online (Sandbox Code Playgroud)


ins*_* me 11

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

编辑: 据我所知,COALESCE两者兼容,所以我选择更换NULL列.

现在我认为,COUNT()荷兰国际集团NULL的值返回0在MySQL中也一样,所以我Rashmi同意.你能告诉我们查询和想要的结果吗?


Ras*_*dit 11

我不确定我是否理解了您的确切问题,但是在左连接的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
Run Code Online (Sandbox Code Playgroud)


GaZ*_*GaZ 5

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


小智 5

COALESCE(XXX, 0)
Run Code Online (Sandbox Code Playgroud)

E.g.

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;
Run Code Online (Sandbox Code Playgroud)

That works for me.