38

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

これどうやってするの?

4

7 に答える 7

24

使用する:

ISNULL(count(*), 0)
于 2009-06-24T10:55:26.343 に答える
19

「ケース」を使用できます

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
于 2012-11-20T06:51:06.250 に答える
12

あなたの問題を正確に理解しているかどうかはわかりませんが、左結合の 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
于 2009-06-24T11:08:33.743 に答える
11

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

編集: 私が言われたようCOALESCEに、両方で機能するので、列を置き換えるためにそれを選択しNULLます。

COUNT()ingNULL値は MySQL でも返されると思う0ので、Rashmi に同意します。クエリと必要な結果を見せていただけますか?

于 2009-06-24T10:57:16.887 に答える
7

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

于 2009-06-24T11:32:06.910 に答える
4

SQL Server とSybaseのIsNullを見てください。Oracle でNVLを使用します。

于 2009-06-24T10:55:10.197 に答える