SQL join 多表

Jenf_Mu 2010-12-19 05:24:27
比如有这样一个记录学生成绩的表

学生表
ID 姓名 科目1 成绩1 科目2 成绩2……
1 111 1 89 3 99

这里科目里的1、2、3分别表示一些实际的科目,但在另外一个表里

科目表
科目ID 科目名字
1 语文
2 数学
3 物理


现在想要查询结果为
姓名 科目1 成绩1 科目2 成绩
111 语文 89 数学 99……


select a.姓名,b.科目名字,a.成绩1,b.科目名字a.成绩2
from 学生表 a join 科目表 b
on a.科目1=b.科目ID and a.科目2=b.科目ID

这样不对呀
...全文
67 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jenf_Mu 2010-12-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oraclers 的回复:]

引用 1 楼 oraclers 的回复:
select a.姓名,b.科目名字,a.成绩1,c.科目名字,a.成绩2,d.科目名字,a.成绩3
from 学生表 a join 科目表 b on b.科目ID=a.科目1
join 科目表 c c.科目ID=a.科目2


上面缺了 on 下面的加上:

……
[/Quote]
我運行怎麼有錯啊,說
join 科目表 c c.科目ID=a.科目2這句的,c附近有錯誤
dawugui 2010-12-19
  • 打赏
  • 举报
回复
select m.姓名,
科目1 = (select 科目名字 from 科目表 n where n.科目ID = m.科目1),
成绩1,
科目2 = (select 科目名字 from 科目表 n where n.科目ID = m.科目2),
成绩2,
...
科目n = (select 科目名字 from 科目表 n where n.科目ID = m.科目n),
成绩n
from 学生表 m
lxq19851204 2010-12-19
  • 打赏
  • 举报
回复

select a.姓名,b.科目名字,a.成绩1,c.科目名字,a.成绩2
from 学生表 a inner join 科目表 b on b.科目ID=a.科目1
inner join 科目表 c c.科目ID=a.科目2
Oraclers 2010-12-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 oraclers 的回复:]
select a.姓名,b.科目名字,a.成绩1,c.科目名字,a.成绩2,d.科目名字,a.成绩3
from 学生表 a join 科目表 b on b.科目ID=a.科目1
join 科目表 c c.科目ID=a.科目2
join 科目表 d d.科目ID=a.科目3
order by a.姓名
[/Quote]
上面缺了 on 下面的加上:

select a.姓名,b.科目名字,a.成绩1,c.科目名字,a.成绩2,d.科目名字,a.成绩3
from 学生表 a join 科目表 b on b.科目ID=a.科目1
join 科目表 c on c.科目ID=a.科目2
join 科目表 d on d.科目ID=a.科目3
order by a.姓名
Oraclers 2010-12-19
  • 打赏
  • 举报
回复
select a.姓名,b.科目名字,a.成绩1,c.科目名字,a.成绩2,d.科目名字,a.成绩3
from 学生表 a join 科目表 b on b.科目ID=a.科目1
join 科目表 c c.科目ID=a.科目2
join 科目表 d d.科目ID=a.科目3
order by a.姓名

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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