Oracle-left join两表关联只取B表匹配到的第一条记录
Posted 马踏飞燕Beautiful
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle-left join两表关联只取B表匹配到的第一条记录相关的知识,希望对你有一定的参考价值。
背景:
A表、B表两表关联,关联出来的结果里B表有不止一条,需求是只要B表结果中的某一条(按某字段排序)
经过百度,发现 row_number() over(partition by a order by b desc)函数可用(需要说明下,order by 必须有缺少会报错),以下是数据环境及结果。
创建数据环境
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;
查询结果如下
以上是关于Oracle-left join两表关联只取B表匹配到的第一条记录的主要内容,如果未能解决你的问题,请参考以下文章