SQL语句问题【急。。。。。。。。。。。。。。。。。。。。。。】

小飛不想飛 2013-07-26 09:49:59
子查询的数据小于外查询的数据不一致怎么办?
例如:
学生表(student):
StudentID name age class Grade
1 张三 16 1 4
2 李四 15 5
3 王五 17
4 赵六 16 2

班级/年级表(class):
classID type className
1 class 1班
2 class 2班
3 class 3班
4 grade 5年级
5 grade 6年级

我想要的查询结果:
StudentID name age className grade
1 张三 16 1班 5年级
2 李四 15 6年级
3 王五 17
4 赵六 16 2班

我的查询语句:
select studentId,name,age,(select className from class where classId = a.class and type = 'class') className,(select className from class where classId = a.Grade and type = 'grade') grade from student a

Ps:因为学生表中班级和年级字段有的是空的,所以子查询的数据少了,报错:值过多。

如果想得到我要的查询结果该怎么查?
...全文
118 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
narcissus1 2013-07-26
  • 打赏
  • 举报
回复
你的student表和class表关系不太明确,如果单单实现你要的需求的话,只用student也可以; select A.StudentID, A.name, A.age, A.classname||'班' class, A.grade+1||'年级' grade from student;
小飛不想飛 2013-07-26
  • 打赏
  • 举报
回复
引用 4 楼 narcissus1 的回复:
[quote=引用 2 楼 xp447196763 的回复:] [quote=引用 1 楼 narcissus1 的回复:] 可以试下这样,(没有测试过) select A.StudentID, A.name, A.age, B.classname, b.grade from student a left outer join class b on a.class=b.classID
class 没有grade字段啊,班级和年级在一张表里,用type区分的[/quote] select A.StudentID, A.name, A.age, case when b.type='class' then B.classname as class, case when b.type='grade' then b.classname as grade from student a left outer join class b on a.class=b.classID [/quote] Thanks
narcissus1 2013-07-26
  • 打赏
  • 举报
回复
引用 2 楼 xp447196763 的回复:
[quote=引用 1 楼 narcissus1 的回复:] 可以试下这样,(没有测试过) select A.StudentID, A.name, A.age, B.classname, b.grade from student a left outer join class b on a.class=b.classID
class 没有grade字段啊,班级和年级在一张表里,用type区分的[/quote] select A.StudentID, A.name, A.age, case when b.type='class' then B.classname as class, case when b.type='grade' then b.classname as grade from student a left outer join class b on a.class=b.classID
narcissus1 2013-07-26
  • 打赏
  • 举报
回复
刚没仔细看,改下代码: select A.StudentID, A.name, A.age, case when b.class='class' then B.classname as class, case when b.class='grade' then b.classname as grade from student a left outer join class b on a.class=b.classID
小飛不想飛 2013-07-26
  • 打赏
  • 举报
回复
引用 1 楼 narcissus1 的回复:
可以试下这样,(没有测试过) select A.StudentID, A.name, A.age, B.classname, b.grade from student a left outer join class b on a.class=b.classID
class 没有grade字段啊,班级和年级在一张表里,用type区分的
narcissus1 2013-07-26
  • 打赏
  • 举报
回复
可以试下这样,(没有测试过) select A.StudentID, A.name, A.age, B.classname, b.grade from student a left outer join class b on a.class=b.classID

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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