Подтвердить что ты не робот

SQL LEFT JOIN возвращает 0, а не NULL

Я хочу присоединиться к двум таблицам, при этом подсчитывается количество записей для каждого типа. Если в левой таблице нет записей этого типа, я хочу вернуть 0, а не null.

Как я могу это сделать?

4b9b3361

Ответ 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 и др.). Но я не уверен в различиях в производительности.