为什么COALESCE在这里不返回null?

我之前被一个 coalesce-returns-null 问题所困扰,这个问题涵盖在这个https://dba.stackexchange.com/questions/165295/why-coalesce-within-a-subquery-returns-null 中。

为了提高我的理解,我想要一个更简单的例子:

create table tbl(col int);

然后

SELECT col
FROM tbl
-- returns nothing of course, tbl is empty

所以在下面的代码中,coalesce没有什么可以合并的,所以它应该不返回任何东西(没有结果集),或者可能是一个空值。

select coalesce(
(
    SELECT col
    FROM tbl
), 22)

但是运行它,我得到 22。为什么它在我认为不应该工作的时候工作?

(在 SQL Server/TSQL 中测试)

回答

在这个查询中:

select coalesce( (SELECT col FROM tbl), 22)
-----------------^ subquery

子查询是一个标量子查询。也就是说,它被用来代替常量。标量子查询具有以下属性:

  • 返回一列。
  • 返回零行或一行。
  • 如果它返回零行,则值为NULL

其中的第三个就是为什么你会NULL如此COALESCE()返回第二个参数。

请注意,如果tbl有多于一行,那么您会收到一个错误,大概是“标量子查询返回多于一行”的形式。即使 中的值col2都是NULL.


以上是为什么COALESCE在这里不返回null?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>