SQL LEFT JOIN retorno 0 em vez de NULL
Pergunta
Eu quero unir duas tabelas, com o número de registros para cada tipo que está sendo contado. Se não há registros desse tipo na tabela esquerda Eu quero um 0 a ser devolvido, não um nulo.
Como posso fazer isso?
Solução
Use:
ISNULL(count(*), 0)
Outras dicas
Eu não tenho certeza se eu entendi o seu problema exato, mas em sqlserver em uma associação à esquerda, você vai obter uma contagem como 0 se a consulta é algo como isto:
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)
para MsSQL, COALESCE(nullable1, nullable2, ..., value_if_null)
para MySQL.
Editar:
Como me disseram, COALESCE
funciona para ambos, então eu escolheria que, para substituir colunas NULL
.
Agora eu acho que os valores COUNT()
ing NULL
retornos 0
no MySQL também, então eu concordo com Rashmi. Você poderia nos mostrar a consulta eo resultado queria?
Você pode usar "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 é mais cruz-compatível do que ISNULL ou NVL (que funciona em MSSQL, Oracle, MySQL, Derby, et al.). Mas eu não estou certo sobre as diferenças de desempenho.
COALESCE(XXX, 0)
por exemplo.
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;
que funciona para mim.