Ответ 1
Вы правы - нет причин для использования:
SELECT COALESCE(b.Foo, NULL)
... потому что если b.foo
- NULL, вы можете просто использовать:
SELECT b.foo
... при условии, что вы хотите знать, является ли значение нулевым.
Я нашел этот фрагмент 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, а не просто выбрать столбец напрямую? Я не могу не смеяться и записывать это как ошибку новобранец, но это заставляет меня задаться вопросом, есть ли какой-то "бахромой", о которой я не знаю.
Вы правы - нет причин для использования:
SELECT COALESCE(b.Foo, NULL)
... потому что если b.foo
- NULL, вы можете просто использовать:
SELECT b.foo
... при условии, что вы хотите знать, является ли значение нулевым.
Я думаю, что может быть краевой случай, но он очень исторический - это немного догадка, но он мог бы окружать ситуацию, когда b.foo = '', например. строка пробелов.
Вернитесь достаточно далеко в SQL, и LTrim ('') вернул null (6/6.5), поэтому мне интересно, был ли Coalesce на пустой строке также оценивать его на null, если бы это произошло, тогда механизм использовался для обращения только строки пробелов, в нулевые значения? (Если все значения оцениваются как null, Coalesce вернет Null.)
Это догадка, и я не могу проверить ее сразу, но ее не следует проверять.