为什么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.