各タイプのレコード数をカウントして、2 つのテーブルを結合したいと考えています。左のテーブルにそのタイプのレコードがない場合は、null ではなく 0 が返されるようにします。
これどうやってするの?
使用する:
ISNULL(count(*), 0)
「ケース」を使用できます
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
あなたの問題を正確に理解しているかどうかはわかりませんが、左結合の 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
ISNULL(nullable, value_if_null)
MsSQL の場合COALESCE(nullable1, nullable2, ..., value_if_null)
、MySQL の場合。
編集:
私が言われたようCOALESCE
に、両方で機能するので、列を置き換えるためにそれを選択しNULL
ます。
COUNT()
ingNULL
値は MySQL でも返されると思う0
ので、Rashmi に同意します。クエリと必要な結果を見せていただけますか?
COALESCE は、ISNULL や NVL よりも相互互換性があります (MSSQL、Oracle、MySQL、Derby などで動作します)。しかし、パフォーマンスの違いについてはよくわかりません。
SQL Server とSybaseのIsNullを見てください。Oracle でNVLを使用します。