这是我的脚本:
UPDATE public.build_analyzer_objectdatanormalized normal
SET unique_code = concat_ws('.', normal.unique_code, d_rank.code)
FROM (SELECT main.year_data
, main.build_code
, main.form_owner_code
, r_normal.unique_code
, dense_rank() OVER (ORDER BY r_normal.unique_code) code
FROM public.build_analyzer_objectdatanormalized r_normal
INNER JOIN public.build_analyzer_objectdatamain main ON r_normal.main_id = main.id
) d_rank
, public.build_analyzer_objectdatamain main
WHERE normal.main_id = main.id
AND normal.unique_code = d_rank.unique_code
AND main.form_owner_code = d_rank.form_owner_code
AND main.year_data != d_rank.year_data;
ForeginKey
表中的build_analyzer_objectdatanormalized
表和build_analyzer_objectdatamain
字段中有一个unique_code
,其中包含以下值:
10.13.109.75.00
10.13.109.75.00
10.13.109.75.00
10.13.152.38.120
10.13.152.38.120
如果我删除除normal.unique_code = d_rank.unique_code
以外的所有过滤器,它将在unique_code
的末尾增加排名。
但是我需要应用过滤器,例如-一组唯一值(每个等级)仅是year_data
表中具有各种build_analyzer_objectdatamain
的值。但是我的过滤器不起作用。
是否只有在满足条件(unique_code
相同的对象使用不同的年份)的情况下,才可以应用唯一排名?
更新(示例数据):
build_analyzer_objectdatanormalized
执行脚本之前的结果:
unique_code main_id
10.13.84.38.204 28864
10.13.84.38.204 28865
10.13.84.38.204 16161
10.13.109.75.00 17635
10.13.109.75.00 17637
10.13.109.75.00 17636
build_analyzer_objectdatamain
结果:
id form_owner_code year_data
16161 11 2012
17635 11 2017
17636 11 2017
17637 11 2017
28864 11 2013
28865 11 2013
build_analyzer_objectdatanormalized
在执行脚本之前:
unique_code main_id year_data form_owner_code
10.13.84.38.204.59 28864 2013 11
10.13.84.38.204.59 28865 2013 11
10.13.84.38.204.59 16161 2012 11
10.13.109.75.00.10 17635 2017 11
10.13.109.75.00.10 17637 2017 11
10.13.109.75.00.10 17636 2017 11
因此,唯一等级(59,10)适用于同一年份的对象,但是我仅在具有不同年份的对象时才需要使用唯一等级。