web-dev-qa-db-ja.com

SQL LEFT JOINがNULLではなく0を返す

2つのテーブルを結合し、各タイプのレコード数をカウントしたいと思います。左側のテーブルにそのタイプのレコードがない場合は、nullではなく0を返します。

これどうやってするの?

23
Karl

使用する:

ISNULL(count(*), 0)
15
cjk

MsSQLの場合はISNULL(nullable, value_if_null)、MySQLの場合はCOALESCE(nullable1, nullable2, ..., value_if_null)

編集:聞いたとおり、COALESCEはどちらでも機能するため、NULL列を置き換えるように選択します。

MySQLでもCOUNT() ing NULLの値は0を返すと思うので、Rashmiに同意します。クエリと必要な結果を教えていただけますか?

11
instanceof me

私があなたの正確な問題を理解したかどうかはわかりませんが、左結合の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
11
Rashmi Pandit

「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
10

SQL Serverの IsNullSybase を見てください。 Oracleでは [〜#〜] nvl [〜#〜] を使用します。

4
RichardOD

COALESCEは、ISNULLまたはNVLよりも互換性があります(MSSQL、Oracle、MySQL、Derbyなどで動作します)。しかし、パフォーマンスの違いについてはわかりません。

4
GaZ
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;

それは私にとってはうまくいきます。

1
yuchen zhong