开发者

COALESCE with NULL

开发者 https://www.devze.com 2022-12-12 14:00 出处:网络
I found this snippet of SQL in a view and I am rather puzzled by it\'s purpose (actual SQL shortened for brevity):

I found this snippet of SQL in a view and I am rather puzzled by it's purpose (actual SQL shortened for brevity):

SELECT
    COALESCE(b.Foo, NULL) AS Foo

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

I cannot think of a single reason of the purpose of coalescing with null instead of just doing this:

SELECT
    b.Foo AS开发者_运维技巧 Foo

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

Or at the very least don't include the NULL explicitly:

SELECT
    COALESCE(b.Foo) AS Foo

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

I don't know who authored this (so I cannot ask), when it was authored, or for what specific MS SQL Server version it was written for (pre-2008 for sure though).

Is there any valid reason to coalesce with NULL instead of just selecting the column directly? I can't help but laugh and write it off as a rookie mistake but it makes me wonder if there is some "fringe case" that I don't know about.


You are right - there is no reason to use:

SELECT COALESCE(b.Foo, NULL)

...because if b.foo is NULL, you might as well just use:

SELECT b.foo

...assuming that you want to know if the value is null.


I think there might be an edge case, but it is very historic - it's a bit of a guess but it could surround the situation where b.foo = ' ' e.g. a string of spaces.

Go back far enough in SQL and LTrim(' ') returned null (6 / 6.5), so I am wondering whether Coalesce on an empty string also evaluated it to null, if it did then the mechanism was being used to turn strings of spaces only, into null values? (If all values evaluate as null, Coalesce will return Null.)

It's a guess and I can not test it right away, but shouldn't be hard to check.


I would use it if I have multiple columns that I want to check whether all of them are null or not, instead of using AND and IS NOT NULL with every column, I can use a single COALESCE which will make the code simpler and more readable, for example

Select t.a, t.b, t.c, t.d, t.e
from table t
where coalesce(t.a, t.b, t.c, t.d, t.e) is [not] null
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号