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?

War es hilfreich?

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

Lesen Sie IsNull in SQL Server und NVL in Oracle.

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top