如果替换空结果?

zity_chow 2011-11-13 09:47:32
例如 select name as '名字' from a where id=0;
但是a表里面没有id为“0”结果,也就是没有结果返回。
那么这种情况下怎样在“名字”列显示出“没有结果”等信息?

我试过“ISNULL”,不行的,因为返回的结果不是“NULL”,而是没有结果。
...全文
58 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zity_chow 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 roy_88 的回复:]

SQL code
select isnull(b.id,0) as 'id',isnull(a.name,'没有结果') as '名字' from def as b
left join abc as a on a.id=b.aid
where b.id=1;


这情况应该用left join
[/Quote]

非常感谢,你太厉害了!!!
中国风 2011-11-13
  • 打赏
  • 举报
回复
select isnull(b.id,0) as 'id',isnull(a.name,'没有结果') as '名字' from def as b  
left join abc as a on a.id=b.aid
where b.id=1;


这情况应该用left join
zity_chow 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 roy_88 的回复:]

SQL code
或用

select top 1
名字
from
(select name as '名字',ord=0 from a where id=0
union all
select '没有结果' as 名字,ord=1
)t
order by ord asc
[/Quote]

谢谢你的回答,如果是多表联查呢?
例如
select b.id as 'id',a.name as '名字' from def as b
inner join abc as a on a.id=b.aid
where b.id=1;

同样,id=1时,“id”列有结果,但是表b中,id为1的行对应的aid为0,所以表a没有id为0的结果,
这样会导致“id”和“名字”都没有结果。怎样解决?
中国风 2011-11-13
  • 打赏
  • 举报
回复
或用

select top 1
名字
from
(select name as '名字',ord=0 from a where id=0
union all
select '没有结果' as 名字,ord=1
)t
order by ord asc
中国风 2011-11-13
  • 打赏
  • 举报
回复
可用变量传参
declare @Name nvarchar(50)
set @Name=isnull((select name as '名字' from a where id=0),'没有结果')

select @Name as 名字

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧