left join 时从右表的多条数据中取1条

应用场景

使用left join时,左表为主要表格,从右表中获取一列数据作为辅助注释,然而右表中存在多条,如何取其中1条作为想要的数据。

代码

错误情况:

select l.*,r.辅助注释 from left_table  l left join right_table  r on l.关联列名 = r.关联列名

该中情况中由于右表right_table存在重复数据,故导致结果重复。

正确情况,应先对右表中数据进行筛选:

select 关联列,辅助注释列,row_number() over (partition by 关联列 order by 日期 desc) as rownum from 右表

相当于将右表中的数据,按照“关联列”分组,按照“日期”排序,然后新增了一列“rownum”,数值为每一个分组中的序号1,2,3等。

关联列辅助注释列rownum
aaa孙悟空111
aaa孙悟空22222
aaa孙悟空333
bbb唐僧1
bbb假唐僧2

最终代码:

select l.*,r.辅助注释 from left_table  l left join 
(select * from 
  (select 辅助注释列,关联列,row_number() over (partition by 关联列 order by 日期 desc) as rownum from 右表)
   where rownum = 1 )  r 
on l.关联列名 = r.关联列名

取最新日期的辅助注释列内容,作为左表的补充。

  • 18
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值