背景
有功能需要多表联合查询,有部分结果看起来出现两次或更多次
排查
发现是Left join右表存在多条记录
需求
右表中多条记录需要先分组,取分组中第一条,才是需要的连接数据
方案
使用Oracle自带函数rank()
--product_code 分组字段名
--model 排序字段名,识别你需要的数据
--r=1 拿每组中的第一条
--and product_code = 'KZ070Q' 可以增加更多的范围条件
select * from (select rank() over(partition by product_code order by model) r, a.* from MBOM a) where r = 1 and product_code = 'KZ070Q'
完成
以上,解决问题,满足需求。
(适用)
多表联合查询,发现数据重复出现,可以考虑联合表是否出现多条记录,是否分组获取第一条,就能满足需求,那么,上面的方案,就能解决这个重复数据问题。