SQL Server ISNULL / Coalesce仍然返回空列表

时间:2015-11-20 19:35:59

标签: sql sql-server select coalesce

我有一个名为path的表,其中一个名为Users的列包含整数值。每个用户都有一个限制,但未注册的用户的默认限制为1。

我想运行一个简单的查询,告诉我注册用户的限制,如果他们不是注册用户则默认为1,但是当我运行Limit或{{{ 1}}如下所示:

ISNULL

如果我查询现有用户,查询将正常工作,但如果我尝试非注册用户将返回空列表[它应该返回值为1的单行]。

使用Coalesce代替合并会产生相同的结果。我发现的SELECT coalesce(Limit,1) AS limit FROM User WHERE userID = 'testUser' 和coalesce的每个例子都是这样的。我错过了什么?

2 个答案:

答案 0 :(得分:6)

coalesce对返回的值进行操作,并评估它是否为null。在你的情况下,一个不存在的只是没有一行,所以,正如你所指出的那样,它不起作用。

但是,您可以使用左连接模拟此行为:

SELECT    COALESCE(b_limit, a_limit) AS limit
FROM      (SELECT 1 AS a_limit) a
LEFT JOIN (SELECT limit AS b_limit
           FROM   user
           WHERE  userID = 'testUser') b ON 1 = 1

答案 1 :(得分:0)

可能是..如果subselect结果为null,则结果为1

SELECT coalesce((SELECT Limit 
                   FROM User 
                  WHERE userID = 'testUser'), 1) AS limit