Je souhaite rejoindre deux tables, avec le nombre d'enregistrements pour chaque type compté. S'il n'y a pas d'enregistrement de ce type dans la table de gauche, je veux que un 0 soit renvoyé, pas un null.
Comment puis-je faire ceci?
Utilisation:
ISNULL(count(*), 0)
ISNULL(nullable, value_if_null)
pour MSSQL, COALESCE(nullable1, nullable2, ..., value_if_null)
pour MySQL.
EDIT : Comme je suis dit, COALESCE
fonctionne pour les deux, donc je choisirais cela pour remplacer les colonnes NULL
.
Maintenant, je pense que COUNT()
ING NULL
valeurs renvoie 0
Dans MySQL aussi, alors je suis d'accord avec Rashmi. Pourriez-vous nous montrer la requête et le résultat recherché?
Je ne suis pas sûr que j'avais compris votre problème exact, mais dans SQLServer sur une jointure gauche, vous obtiendrez un compte comme 0 si votre requête est quelque chose comme ceci:
select t1.id, count(t2.id)
from table1 t1
left outer join table2 t2
on t1.id = t2.id
group by t1.id
Vous pouvez utiliser "cas"
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
La regroupement est plus compatible que Isnull ou NVL (cela fonctionne sur MSSQL, Oracle, MySQL, Derby, et al.). Mais je ne suis pas sûr des différences de performance.
COALESCE(XXX, 0)
Par exemple.
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;
Ça marche pour moi.