Oracle连表查询,A表一条数据,B表有多条数据,连表查询,取A表信息和B表排序后的一条数据,如何在一条SQL里查询?

发布于 2022-01-07 21:44:28 字数 1351 浏览 649 评论 2

求教,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":标识符无效

 

求大神赐教

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

泪冰清 2022-01-08 04:03:17

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
 

空城仅有旧梦在 2022-01-07 21:50:08

A在括号外定义,在括号内使用当然会报错。

另外,排序要放到最外层。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文