求一条SQL语句

longds7 2010-04-07 11:22:18
有两个表一个是人员表user,一个是信息表info


user表 info表
id 姓名 性别 id 姓名 信息
1 张三 男 1 张三 信息一
2 李四 女 2 张三 信息二
3 王五 男 3 李四 信息三
4 张三 信息四
5 李四 信息五

两个表的关联字段是姓名
希望的结果是
张三 男 信息一
李四 女 信息三
王五 男 空
...全文
53 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
htl258_Tony 2010-04-07
  • 打赏
  • 举报
回复
create table [user](id int,姓名 varchar(10),性别 varchar(10))
insert into [user] values(1 ,'张三', '男')
insert into [user] values(2 ,'李四', '女')
insert into [user] values(3 ,'王五', '男')
create table info(id int,姓名 varchar(10),信息 varchar(10))
insert into info values(1, '张三', '信息一')
insert into info values(2, '张三', '信息二')
insert into info values(3, '李四', '信息三')
insert into info values(4, '张三', '信息四')
insert into info values(5, '李四', '信息五')
go


select a.姓名,b.信息
from [user] a
outer apply(select top 1 信息 from info where a.姓名=姓名) b
/*
姓名 信息
---------- ----------
张三 信息一
李四 信息三
王五 NULL

(3 行受影响)
*/
用老D的表
dawugui 2010-04-07
  • 打赏
  • 举报
回复
create table [user](id int,姓名 varchar(10),性别 varchar(10))
insert into [user] values(1 ,'张三', '男')
insert into [user] values(2 ,'李四', '女')
insert into [user] values(3 ,'王五', '男')
create table info(id int,姓名 varchar(10),信息 varchar(10))
insert into info values(1, '张三', '信息一')
insert into info values(2, '张三', '信息二')
insert into info values(3, '李四', '信息三')
insert into info values(4, '张三', '信息四')
insert into info values(5, '李四', '信息五')
go

select m.姓名 ,m.性别, 信息 = isnull((select top 1 信息 from info n where n.姓名 = m.姓名 order by id),'空') from [user] m

drop table [user] , info

/*
姓名 性别 信息
---------- ---------- ----------
张三 男 信息一
李四 女 信息三
王五 男 空

(所影响的行数为 3 行)
*/
dawugui 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 longds7 的回复:]
user表
id 姓名 性别
1 张三 男
2 李四 女
3 王五 男



info表
id 姓名 信息
1 张三 信息一
2 张三 信息二
3 李四 信息三
4 张三 信息四
5 李四 信息五
[/Quote]
如果是最开始的需求:
select m.姓名 ,m.性别 ,isnull(n.信息,'空') 信息
from [user] m left join info n on m.姓名 = n.姓名

如果是后面的:
select m.姓名 ,m.性别, isnull((select top 1 信息 from info n where n.姓名 = m.姓名 order by id),'空') from [user] m
dawugui 2010-04-07
  • 打赏
  • 举报
回复
select m.姓名 ,m.性别 ,isnull(n.信息,'空') 信息
from [user] m left join info n on m.姓名 = n.姓名
longds7 2010-04-07
  • 打赏
  • 举报
回复
user表
id 姓名 性别
1 张三 男
2 李四 女
3 王五 男



info表
id 姓名 信息
1 张三 信息一
2 张三 信息二
3 李四 信息三
4 张三 信息四
5 李四 信息五
SQL77 2010-04-07
  • 打赏
  • 举报
回复
SELECT U.*,I.信息 FROM USER U LEFT JOIN INFO I ON U.ID=I.ID

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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