我发现SQL的这个片段在视图中,我颇为不解通过它的目的(实际的SQL缩短为简洁起见):COALESCE用NULL
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合并,而不是直接选择列?我忍不住笑,把它当作菜鸟的错误写下来,但这让我怀疑是否有一些我不知道的“边缘情况”。
看起来像一个新人的错误给我。 – 2009-11-19 22:15:57
或者需求已经多次改变,所以这个查询被不同的开发者多次修改。也许COALESCE(b.Foo,NULL)是COALESCE(b.Foo,[某值/表达式])之前。然后要求变了。所以有人没有想到就变成了COALESCE(b.Foo,NULL)。 – David 2009-11-19 22:19:41
如果b.Foo为NULL,这可能是触发错误的方法。是否有效是另一个问题。 – Mike 2016-09-02 19:33:17