join orcl的left_Oracle-left join两表关联只取B表匹配到的第一条记录

背景:

A表、B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序)

首先想到了直接写个带排序的子查询去匹配外围的值,从这个结果集中只要第一条,但是经过验证发现,里边的条件是获取不到外层的值的,因此此方案不可行。

经过百度,发现 row_number() over函数可用,以下是数据环境及结果。

创建数据环境

create table A(ANAME varchar(20));

insert into A values('alan');

insert into A values('Alee');

insert into A values('aspn');

create table B

(

BNo varchar(10),

BTell varchar(20),

Name varchar(20)

);

insert into B values('NO1','1366666','alan');

insert into B values('NO1','1388888','alan');

insert into B values('NO1','1399999','alan');

insert into B values('NO2','1333333','Alee');

insert into B values('NO3','1311111','aspn');

insert into B values('NO3','1322222','aspn');

直接关联查询的话,结果如下

需求是只要每个人的第一条记录(按BTELL排序)

select *

from a

left join (select *

from (select b. *,

(row_number()

over(partition by bno order by BTell desc)) px

from b) e

where px = 1) t

on a.aname = t.name;

查询结果如下

问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值