这个SQL语言怎么写(100分)

  • 主题发起人 主题发起人 blinking1313
  • 开始时间 开始时间
B

blinking1313

Unregistered / Unconfirmed
GUEST, unregistred user!
表1:
字段名 班级
1班
2班

表2:
字段名 班级 学生名
1班 张三
1班 李四
1班 王五
2班 赵
2班 钱
2班 孙

表3:
字段名 学生名 类型 书名
张三 地理 <山>
张三 地理 <河>
张三 地理 <大海>
张三 历史 <史记>
李四 历史 <汉书>
李四 历史 <史记>
赵 历史 <汉书>


想用一句SQL语言得到:1班学生各有什么类型的书及代表书名(书名为本类型的第一条)
结果应是:
字段名 学生名 类型 书名 班级
张三 地理 <山> 1班
张三 历史 <史记> 1班
李四 历史 <汉书> 1班
 
你在表3中的主键是什么?你的排序是按照什么排序的第一条?
 
表3有一个ID字段
字段名 id 学生名 类型 书名
1 张三 地理 <山>
2 张三 地理 <河>
3 张三 地理 <大海>
4 张三 历史 <史记>
5 李四 历史 <汉书>
6 李四 历史 <史记>
7 赵 历史 <汉书>
 
用临时表吧
 
我现用identity加个索引,在取出,
select identity(int,1,1) as id,* into #temp from 表3
select A.学生名,A.类型,A.书名,B.班级 from #temp A
inner join (select * from 表2 where 班级=1班) B
on A.学生名=B.学生名
where A.id in (select min(id) from #temp group by 学生名,类型)
 
如果有id就好办了
select A.学生名,A.类型,A.书名,B.班级 from 表3 A
inner join (select * from 表2 where 班级=1班) B
on A.学生名=B.学生名
where A.id in (select min(id) from 表3 group by 学生名,类型)
 
已经搞定
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部