码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2020-03-16 14:39:20      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:ber   arch   value   creat   必须   image   over   acl   mamicode   

背景:

   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表匹配到的第一条记录

标签:ber   arch   value   creat   必须   image   over   acl   mamicode   

原文地址:https://www.cnblogs.com/Formulate0303/p/12503299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!