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:因为学生表中班级和年级字段有的是空的,所以子查询的数据少了,报错:值过多。

如果想得到我要的查询结果该怎么查?
...全文
73 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2013-07-26 09:49
社区公告
暂无公告