从另一个表更新表

问题描述:

我有2个表“animal_breeds”和“ztmp.ztmp_509810_anims_out”。在“动物繁殖”中,每只动物都有关键和品种的名称和百分比。很少有动物可能有两种不同比例的不同品种。现在,基于动物的钥匙“animals_breeds”我想更新“ztmp.ztmp_509810_anims_out”从另一个表更新表

enter image description here

我使用这个代码,我知道错了

update ztmp.ztmp_509810_anims_out 
set 
    alt_id1 = ab.breed 
    ,alt_id2 = pcnt 
    ,alt_id3 = ab.breed 
    ,alt_id4 = pcnt 
    ,alt_id5 = ab.breed 
    ,alt_id6 = pcnt 
    ,alt_id7 = ab.breed 
    ,alt_id8 = pcnt 

from animal_breeds ab 
where ab.soc_code = ztmp_509810_anims_out.soc_code and ab.animals_key = ztmp_509810_anims_out.animals_key 
    and ab.soc_code = 'AUNDB'; 

我可以用一个用于在更新语句中循环?

+0

你为什么觉得你需要循环? –

+0

@Vao Tsun - 使用循环是我的猜测。我不需要使用循环,但我无法理解如何解决它,否则... –

+0

你的屏幕截图是不是太翔实 - 描述问题? –

UPDATE ztmp.ztmp_509810_anims_out AS z 
SET soc_code = q.soc_code, 
    animals_key = q.animals_key, 
    alt_id1 = breeds[1], 
    alt_id2 = pcnts[1], 
    alt_id3 = breeds[2], 
    alt_id4 = pcnts[2] 
FROM (SELECT soc_code, animals_key, 
      array_agg(breed) breeds, array_agg(pcnt) pcnts 
     FROM animal_breeds 
     GROUP BY soc_code, animals_key 
    ) q 
WHERE z.soc_code = q.soc_code 
    AND z.animals_key = q.animals_key; 

如果可以有2米以上的品种每animals_key,加breeds[3]pcnts[3]等。

+0

uf!我以为OP想要加入从cte更新:) –

+0

@Laurenz Albe - 我们可以使用更新语句而不插入? –

+0

我已将“答案”重写为“UPDATE”语句。 –