SQL LEFT JOIN return 0 statt NULL
Frage
Ich mag zwei Tabellen verknüpfen, mit der Anzahl der Datensätze für jede Art gezählt. Wenn es keine Aufzeichnungen dieser Art in der linken Tabelle sind möchte ich eine 0 zurückgegeben werden, nicht eine Null.
Wie kann ich das tun?
Lösung
Verwendung:
ISNULL(count(*), 0)
Andere Tipps
Ich bin nicht sicher, ob ich Ihr genaues Problem verstanden habe, aber in SQLServer auf einem LEFT JOIN, Sie wird eine Zählung als 0, wenn Ihre Abfrage so etwas wie dieses:
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)
für MsSQL, COALESCE(nullable1, nullable2, ..., value_if_null)
für MySQL.
Edit:
Wie mir gesagt, COALESCE
für beide funktioniert, also würde ich, dass NULL
Spalte ersetzen wählen.
Jetzt denke ich, dass COUNT()
ing NULL
Werte 0
in MySQL gibt zu, so dass ich stimme mit Rashmi. Können Sie uns die Abfrage und das gewünschte Ergebnis zeigen?
Sie können mit "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 ist cross-kompatibel als ISNULL oder NVL (es funktioniert auf MSSQL, Oracle, MySQL, Derby, et al.). Aber ich bin nicht sicher über die Performance-Unterschiede.
COALESCE(XXX, 0)
z.
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;
Das ist für mich funktioniert.