Я хочу присоединиться к двум таблицам, при этом подсчитывается количество записей для каждого типа. Если в левой таблице нет записей этого типа, я хочу вернуть 0, а не null.
Как я могу это сделать?
Ответ 1
Использование:
ISNULL(count(*), 0)
Ответ 2
ISNULL(nullable, value_if_null) для MsSQL, COALESCE(nullable1, nullable2, ..., value_if_null) для MySQL.
Edit:
Как мне сказали, COALESCE работает для обоих, поэтому я бы выбрал это для замены столбцов NULL.
Теперь я думаю, что значения COUNT() ing NULL возвращают 0 в MySQL тоже, поэтому я согласен с Rashmi. Не могли бы вы показать нам запрос и желаемый результат?
Ответ 3
Я не уверен, понял ли я вашу точную проблему, но в 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
Ответ 4
Вы можете использовать "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
Ответ 5
Посмотрите IsNull в SQL Server и Sybase. Используйте NVL в Oracle.
Ответ 6
COALESCE является более кросс-совместимым, чем ISNULL или NVL (он работает на MSSQL, Oracle, MySQL, Derby и др.). Но я не уверен в различиях в производительности.