需求:A表、B表两表关联,关联出来的结果里B表有不止一条(这些数据里的一个字段是相同的),现在只要B表结果中的那一个字段的值。
然后想到了直接写个带排序的子查询去匹配外围的值,从这个结果集中只要第一条,但是经过验证发现,里边的条件是获取不到外层的值的,因此此方案不可行。
创建环境:
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');
直接关联查询的话,结果如下 :
B表中的多条数据都分别匹配了A表数据,造成重复。
使用row_number() over函数
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