SQL Server ISNULL/Coalesce仍返回空列表

SQL Server ISNULL/Coalesce仍返回空列表,sql,sql-server,select,coalesce,Sql,Sql Server,Select,Coalesce,我有一个名为Users的表,其中有一个名为Limit的列,其中包含整数值。每个用户都有一个限制,但非注册用户的默认限制为1 我想运行一个简单的查询,告诉我用户注册时的限制,如果他们不是注册用户,则默认为1,但是当我使用ISNULL或Coalesce运行查询时,如下所示: SELECT coalesce(Limit,1) AS limit FROM User WHERE userID = 'testUser' 如果我在现有用户上进行查询,查询将正常工作,但如果我尝试非注册用户,查询将返回一个

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

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

SELECT coalesce(Limit,1) AS limit 
FROM User 
WHERE userID = 'testUser'
如果我在现有用户上进行查询,查询将正常工作,但如果我尝试非注册用户,查询将返回一个空列表[它将返回一个值为1的单行]


使用
ISNULL
而不是coalesce会产生相同的结果。我发现的每个
示例都是空的
,coalesce看起来就是这样。我缺少什么?

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

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

共享表结构和示例数据。我猜您的查询不会为未注册的用户返回任何行,因此一切都正常运行,听起来用户不存在于
User
表中。一个简单的
选择*
为相关的用户ID返回什么?用户表中不存在未注册的用户。具体来说,我将使用他们的IP作为用户ID[这将存储在另一个表中用于其他目的]
COALESCE(a\u limit,b\u limit)
将始终返回1。更改
COALESCE
@lad2025 eap内部的顺序!的确谢谢你的注意。我太粗心了。@ConnorU绝对不是我的日子。。。不能只省略on子句中的
。请看编辑后的答案。我刚刚看到您的编辑。是的,加入条件不见了。这很有效,谢谢!这是一个有趣的方法。乍一看,它似乎不起作用,但由于select returning no row是作为列的子查询,它将起作用。如果子查询不返回任何行,则值为NULL,结果COALESCE为1