3

不幸的是,我今天面临另一个我不明白的错误。我正在从我的数据库中选择下一个和上一个 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 + "

我说的是两个子查询。

提前致谢!

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

4

1 回答 1

10

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

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

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

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

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

coalesce((select top 1 Id from ...),0)
于 2013-07-05T22:44:07.237 回答