Pregunta

Quiero unir dos tablas, contando la cantidad de registros para cada tipo. Si no hay registros de ese tipo en la tabla de la izquierda, quiero que se devuelva un 0, no un nulo.

¿Cómo puedo hacer esto?

¿Fue útil?

Solución

Uso:

ISNULL(count(*), 0)

Otros consejos

No estoy seguro de haber entendido su problema exacto, pero en sqlserver en una unión izquierda, obtendrá un recuento como 0 si su consulta es algo como esto:

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 han dicho, COALESCE funciona para ambos, por lo que elegiría eso para reemplazar las columnas NULL .

Ahora creo que los valores COUNT () ing NULL devuelven 0 en MySQL también, así que estoy de acuerdo con Rashmi. ¿Podría mostrarnos la consulta y el resultado deseado?

Puede 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

Mire IsNull en SQL Server y Sybase . Utilice NVL en Oracle.

COALESCE es más compatible que ISNULL o NVL (funciona en MSSQL, Oracle, MySQL, Derby, et al.). Pero no estoy seguro de las diferencias de rendimiento.

COALESCE(XXX, 0)

Por ejemplo

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;

Eso funciona para mí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top