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?

Foi útil?

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

IsNull no SQL Server e Sybase. Use NVL em Oracle.

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top