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?
6 réponses
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
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 ?
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
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.