web-dev-qa-db-fra.com

SQL a laissé rejoindre le retour 0 plutôt que null

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?

23
Karl

Utilisation:

ISNULL(count(*), 0)
15
cjk

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é?

11
instanceof me

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
11
Rashmi Pandit

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
10

Regardez isnull dans SQL Server et Sybase . Utilisez NVL à Oracle.

4
RichardOD

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.

4
GaZ
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.

1
yuchen zhong