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;
复制代码

 

查询结果如下

 

参考:https://www.cnblogs.com/luxd/p/8527457.html

以上是关于Oracle-left join两表关联只取B表匹配到的第一条记录的主要内容,如果未能解决你的问题,请参考以下文章

sql用inner join内关联查询有多条记录一样只取一条?

mysql中两表inner join连接 如何去重

INEER JOIN..ON两表查询例子

mysql left join 左连接查询关联n多张表

[oracle]两表关联的update操作问题

mysql left join 左连接查询关联n多张表