Oracle连表查询,A表一条数据,B表有多条数据,连表查询,取A表信息和B表排序后的一条数据,如何在一条SQL里查询?
求教,ORACLE查询的一个疑惑,如题描述:Oracle连表查询,A表一条数据,B表有多条数据,连表查询时,取B表排序后的一条数据,如何在一条SQL里查询?
案例:
比如有人员信息表person_info,月收入表person_income,用person_id字段关联
person_info表
person_id
姓名NAME
person_income表
person_id
月收入income
更新时间updated_date
我要根据person_id查询 人员姓名和他最近一个月的薪资
查询的时候,下面这2个SQL都是正确的,但是结合在一起就报错了,这是为啥......
正确的sql
1、根据person_id查询最新薪资
select income from (select income from person_income where person_id='001' order by updated_date desc) where rownum=1
2、根据person_id查询姓名和默认排序的第一条薪资
select A.person_name,(select B.income from person_income B where A.person_id=B.person_id and rownum=1) from person_info A where A.person_id ='001'
报错的SQL
根据person_id查询姓名和排序后的薪资
select A.person_name,(select income from (select B.income from person_income B where A.person_id=B.person_id order by updated_date desc) where rownum=1) from person_info A where A.person_id ='001'
报错信息:
ORA-00904:"A"."person_id":标识符无效
A在括号外定义,在括号内使用当然会报错。
另外,排序要放到最外层。
######select *
from (select p.person_id, p.name, pd.income, pd.updated_date
from person_info p
left join person_income pd
on p.person_id = pd.person_id
where p.person_id = #personId#
order by pd.updated_date)
where rownum = 1
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。