SQL 服务器 ISNULL / Coalesce 仍然返回空列表
SQL Server ISNULL / Coalesce still returning empty lists
我有一个名为 Users
的 table 和一个名为 Limit
的列,其中包含整数值。每个用户都有一个限制,但非注册用户的默认限制为 1。
我想要 运行 一个简单的查询,告诉我用户的限制(如果他们已注册)或默认为 1(如果他们不是注册用户),但是当我 运行 查询时使用 ISNULL
或 Coalesce
如下所示:
SELECT coalesce(Limit,1) AS limit
FROM User
WHERE userID = 'testUser'
如果我查询现有用户,查询将正常工作,但如果我尝试查询未注册用户,查询将 return 一个空列表 [它应该 return 一个值为1].
使用 ISNULL
而不是合并会产生相同的结果。我发现的每个 ISNULL
和 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
我有一个名为 Users
的 table 和一个名为 Limit
的列,其中包含整数值。每个用户都有一个限制,但非注册用户的默认限制为 1。
我想要 运行 一个简单的查询,告诉我用户的限制(如果他们已注册)或默认为 1(如果他们不是注册用户),但是当我 运行 查询时使用 ISNULL
或 Coalesce
如下所示:
SELECT coalesce(Limit,1) AS limit
FROM User
WHERE userID = 'testUser'
如果我查询现有用户,查询将正常工作,但如果我尝试查询未注册用户,查询将 return 一个空列表 [它应该 return 一个值为1].
使用 ISNULL
而不是合并会产生相同的结果。我发现的每个 ISNULL
和 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