2つのテーブルを結合し、各タイプのレコード数をカウントしたいと思います。左側のテーブルにそのタイプのレコードがない場合は、nullではなく0を返します。
これどうやってするの?
使用する:
ISNULL(count(*), 0)
MsSQLの場合はISNULL(nullable, value_if_null)
、MySQLの場合はCOALESCE(nullable1, nullable2, ..., value_if_null)
。
編集:聞いたとおり、COALESCE
はどちらでも機能するため、NULL
列を置き換えるように選択します。
MySQLでもCOUNT()
ing NULL
の値は0
を返すと思うので、Rashmiに同意します。クエリと必要な結果を教えていただけますか?
私があなたの正確な問題を理解したかどうかはわかりませんが、左結合のsqlserverでは、クエリが次のようなものである場合、カウントは0になります。
select t1.id, count(t2.id)
from table1 t1
left outer join table2 t2
on t1.id = t2.id
group by t1.id
「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
SQL Serverの IsNull と Sybase を見てください。 Oracleでは [〜#〜] nvl [〜#〜] を使用します。
COALESCEは、ISNULLまたはNVLよりも互換性があります(MSSQL、Oracle、MySQL、Derbyなどで動作します)。しかし、パフォーマンスの違いについてはわかりません。
COALESCE(XXX, 0)
例えば。
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;
それは私にとってはうまくいきます。