首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

关于一对多的表的查询话语

2012-12-25 
关于一对多的表的查询语句假如我有表A,存储学生学号,姓名,家庭住址,联系电话等信息另有表B,存储学生学号,

关于一对多的表的查询语句
假如我有表A,存储学生学号,姓名,家庭住址,联系电话等信息
另有表B,存储学生学号,课程号,成绩等信息

现在我想得出如下数据形式
学生姓名,课程号,成绩

那么就需要A,B表连接,我这样写
select a.姓名,b.课程号,b.成绩
from A,B
where a.学号 = b.学号;
结果同一个学生姓名,因为有多个成绩,所以有多个行

可是,我又想只要第一行,其他行不要,这样要怎么写sql语句呢?请给完整的sql哦
[最优解释]
为什么现在的LZ都喜欢用女孩做头像,难道更容易获得答复么... 程序员都挺孤独寂寞冷的,所以更需要优先回答女性的问题吧...


行转列,一维转多维   居家必备 MAX(CASE WHEN THEN ELSE END) AS 成绩1
                          MAX(CASE WHEN THEN ELSE END) AS 成绩2
[其他解释]
select c.姓名,c.课程号,c.成绩
from
(
select a.姓名,b.课程号,b.成绩,row_number() over (partition by a.姓名 order by a.姓名,b.课程号) nm
from a,b
where a.学号=b.学号
) c
where nm=1
[其他解释]
如果使用sql*plus
break on 姓名

select a.姓名,b.课程号,b.成绩
from A,B
where a.学号 = b.学号
order by 姓名;

使用其他工具的话,我就不清楚了
[其他解释]
select distinct a.姓名,b.课程号,b.成绩
from A,B
where a.学号 = b.学号
[其他解释]

引用:
select c.姓名,c.课程号,c.成绩
from
(
select a.姓名,b.课程号,b.成绩,row_number() over (partition by a.姓名 order by a.姓名,b.课程号) nm
from a,b
where a.学号=b.学号
) c
where nm=1

这个是正解。还是行转列的问题。。呵呵。
[其他解释]
引用:
为什么现在的LZ都喜欢用女孩做头像,难道更容易获得答复么... 程序员都挺孤独寂寞冷的,所以更需要优先回答女性的问题吧...


行转列,一维转多维   居家必备 MAX(CASE WHEN THEN ELSE END) AS 成绩1
                          MAX(CASE WHEN THEN ELSE END) AS 成绩2

可是,LZ就是女生,木有觉得回家得比较积极啊
不懂什么是行转列,自己去补脑了

热点排行