求教oracle两个表联合查询的sql语句

求教oracle两个表联合查询的sql语句

两个表,主从表为一对多的关系,即,从表中有一条或多条记录同主表匹配;现在我想只显示从表中同主表匹配的第一条记录(指定从表排序方式),请问查询的SQL语句?
例如:
表一为:
姓名编号 姓名
1 N1
2 N2
3 N3
4 N4
=====
表二为
姓名编号 考试科目 成绩
N1 语文 99
N1 数学 90
N1 历史 80
N2 语文 99
N2 地理 90
N3 语文 80
N4 语文 88
————————————————————
查询结果

姓名编号 姓名 科目 成绩
1 N1 语文 99
2 N2 语文 99
3 N3 语文 80
4 N4 语文 88

select * from
(select a.姓名编号,a.姓名,b.考试科目 as 科目,b.成绩,row_number()over(partition by a.姓名 order by b.成绩 desc) as id from 表一 a,表二 b where a.姓名=b.姓名)
where id = 1;

说明:
1、上面的sql是按照成绩降序排列后取出每个姓名的第一条记录,如果想换成升序把【order by b.成绩 desc】改成【order by b.成绩】即可。
2、如果想取第二条记录把【where id = 1;】改成【where id = 2;】即可。
3、如果想去前n条把【where id = 1;】改成【where id <=n;】即可。

---
以上,希望对你有所帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-06-13
select a.姓名编号,a.姓名,b.科目,b.成绩 from 表一 b,表二 c,
(select min(a.rownum),a.姓名编号 from
(select rownum,姓名编号,考试科目,成绩 from 表二) a) d
where b.姓名=c.姓名编号
and b.姓名=c.姓名编号
相似回答