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

COALESCE с NULL

Я нашел этот фрагмент SQL в представлении, и я довольно озадачен его целью (фактический SQL сокращен для краткости):

SELECT
    COALESCE(b.Foo, NULL) AS Foo

FROM a
LEFT JOIN b ON b.aId=a.Id

Я не могу придумать ни одной причины для цели объединения с нулем вместо того, чтобы просто делать это:

SELECT
    b.Foo AS Foo

FROM a
LEFT JOIN b ON b.aId=a.Id

Или, по крайней мере, не указывать NULL явно:

SELECT
    COALESCE(b.Foo) AS Foo

FROM a
LEFT JOIN b ON b.aId=a.Id

Я не знаю, кто автор этого (поэтому я не могу спросить), когда он был автором, или для какой конкретной версии MS SQL Server он был написан для (до 2008 года наверняка, хотя).

Есть ли веская причина объединиться с NULL, а не просто выбрать столбец напрямую? Я не могу не смеяться и записывать это как ошибку новобранец, но это заставляет меня задаться вопросом, есть ли какой-то "бахромой", о которой я не знаю.

4b9b3361

Ответ 1

Вы правы - нет причин для использования:

SELECT COALESCE(b.Foo, NULL)

... потому что если b.foo - NULL, вы можете просто использовать:

SELECT b.foo

... при условии, что вы хотите знать, является ли значение нулевым.

Ответ 2

Я думаю, что может быть краевой случай, но он очень исторический - это немного догадка, но он мог бы окружать ситуацию, когда b.foo = '', например. строка пробелов.

Вернитесь достаточно далеко в SQL, и LTrim ('') вернул null (6/6.5), поэтому мне интересно, был ли Coalesce на пустой строке также оценивать его на null, если бы это произошло, тогда механизм использовался для обращения только строки пробелов, в нулевые значения? (Если все значения оцениваются как null, Coalesce вернет Null.)

Это догадка, и я не могу проверить ее сразу, но ее не следует проверять.