sql - 子查询中的 COALESCE 仍然返回 DBnull

标签 sql sql-server coalesce

不幸的是,我今天面临另一个我不明白的错误。 我正在从我的数据库中选择下一个和上一个 id,并且我正在使用 COALESCE 用数字替换空值。 但是由于某种原因它仍然返回 null,我错过了什么吗?

"Select Gags.Title, Gags.DatePosted, Gags.Image, Users.Username, (Select Top(1) COALESCE(Id, 0) from Gags where Id > " + IdModel.Id + "), (Select Top(1) COALESCE(Id, 0) from Gags where Id < " + IdModel.Id + ") From Gags Inner Join Users on Gags.Userid = Users.Id where Gags.Id = " + IdModel.Id + "

固定查询:

Select Gags.Title, Gags.DatePosted, Gags.Image, Users.Username, isnull((Select Top(1) id from Gags where Id > " + IdModel.Id + "),-1), Isnull((Select Top(1) id from Gags where Id < " + IdModel.Id + "), -1) From Gags Inner Join Users on Gags.Userid = Users.Id where Gags.Id = " + IdModel.Id + "

我说的是两个子查询。

提前致谢!

今天是一个糟糕的编程日..

最佳答案

对于空行集,不会调用 coalesce:

(select top 1 coalesce(Id, 0) from ...)

标量上下文中的空行集返回 null:

select (select 1 where 1=0)
-->
NULL

一种解决方案是将 coalesce 移到子查询之外:

coalesce((select top 1 Id from ...),0)

关于sql - 子查询中的 COALESCE 仍然返回 DBnull,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17497734/

相关文章:

sql - 在sql中检索时将特定字段设为NULL

arrays - 如何将从嵌套选择返回的空值转换为空数组?

sql - 如何找到最新的分区值

sql - 如何将用户 ID(即电子邮件地址)放入连接字符串中

c# - Access 数据库到 Web 应用程序

Mysql在更新语句中使用coalece

Clojure 合并函数

mysql - 数据库设计为每个客户订单存储不同的产品

mysql - 如何使用命令行过程继续导入带有剩余数据的sql文件?

MySQL:在自己的触发器中更新表