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

标签 sql sql-server select coalesce

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

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

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

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

使用 ISNULL 而不是 coalesce 会产生相同的结果。我发现的每个 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

关于SQL Server ISNULL/Coalesce 仍然返回空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33834729/

相关文章:

java - 如何使用 Hibernate 保存价格信息

SQL 将毫秒转换为天、小时、分钟

sql - T-SQL 结果写入列

sql - 合并两个 SQL 查询

PHP 选择表单,如果选项匹配某些内容,则将其选中

sql - 我们如何在sql server中选择前20%和后80%的记录

sql - 计算月平均值,包括数据丢失的日期

mysql - 如何使用 GROUP_CONCAT 将 MySQL 查询正确转换为 MSSQL 查询

c# - 互斥存储过程

mysql - 在这种情况下如何进行高效的 SQL Select?