SQL LEFT JOIN return 0 plutôt que NULL

je veux joindre deux tables, avec le nombre d'enregistrements pour chaque type d'être compté. S'il n'y a pas d'enregistrements de ce type dans la table de gauche, je veux qu'un 0 soit retourné, pas un nul.

Comment puis-je faire cela?

21
demandé sur Germstorm 2009-06-24 14:54:06

6 réponses

Utilisation:

ISNULL(count(*), 0)
13
répondu cjk 2009-06-24 10:55:26

Je ne suis pas sûr si j'ai compris votre problème exact, mais dans sqlserver sur une jointure gauche, vous recevrez un comte 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
9
répondu Rashmi Pandit 2009-06-24 11:08:33

ISNULL(nullable, value_if_null) for MsSQL,COALESCE(nullable1, nullable2, ..., value_if_null) pour MySQL.

Edit: Comme je me suis dit, COALESCE fonctionne pour les deux, donc j'ai choisi de remplacer NULL colonnes.

Maintenant, je pense que COUNT() ing NULL renvoie les valeurs 0 dans MySQL trop, je suis d'accord avec Rashmi. Pourriez-vous nous montrer la requête et le résultat voulu ?

9
répondu instanceof me 2009-06-24 13:33:15

Vous pouvez utiliser "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
9
répondu kaiyasit phanmakorn 2012-11-20 07:10:54

Regardez IsNull dans SQL Server et Sybase. Utilisez NVL dans Oracle.

4
répondu RichardOD 2009-06-24 11:00:17

COALESCE est plus cross-compatible QU'ISNULL ou NVL (il fonctionne sur MSSQL, Oracle, MySQL, Derby, et al.). Mais je ne suis pas sûr des différences de performance.

3
répondu GaZ 2009-06-24 11:32:06