一个SQL语句的问题_f

荷梅月剑 2007-05-11 05:10:07
我有两个表

用户表 uid name
1 张三
2 李四
3 赵五

消息表 mid sortid msg
1 0 欢迎注册
2 0 网站公告
3 1 你是张三吗?

用户表就是用户表,消息表就像是网站公告一样,如果sortid=0,则表示针对所有用户发表公告,非0则是针对用户的id

我现在是想得到这样的查询结果

mid msg sort
1 欢迎注册 所有人
2 网站公告 所有人
3 你是张三吗 张三

我不会弄了,请大家帮帮我,谢谢~~
...全文
158 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
荷梅月剑 2007-05-11
  • 打赏
  • 举报
回复
说实话,我SQL学的时间好短,case,when,isnull,then,left join都是什么意思搞不懂,能介绍下吗?谢谢
荷梅月剑 2007-05-11
  • 打赏
  • 举报
回复
非常感谢,结帐,呵呵
gahade 2007-05-11
  • 打赏
  • 举报
回复
create table 用户表(uid int,name varchar(10))
insert into 用户表
select 1,'张三'
union all select 2,'李四'
union all select 3,'赵五'

create table 消息表(mid int,sortid int,msg varchar(255))
insert into 消息表
select 1,0,'欢迎注册'
union all select 2,0,'网站公告'
union all select 3,1,'你是张三吗?'

select a.mid,a.msg,case when isnull(a.sortid,0)=0 then '所有人' else b.name end as sort
from 消息表 a
left join 用户表 b on a.sortid=b.uid
/*
mid msg sort
----------- ------------------- ----------
1 欢迎注册 所有人
2 网站公告 所有人
3 你是张三吗? 张三

(所影响的行数为 3 行)
*/
gahade 2007-05-11
  • 打赏
  • 举报
回复
select a.mid,a.msg,case when isnull(a.sortid,0)=0 then '所有人' else b.name end as sort
from 消息表 a
left join 用户表 b on a.sortid=b.uid

22,206

社区成员

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

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