Sql 从另一个表更新表

Sql 从另一个表更新表,sql,postgresql,postgresql-9.1,Sql,Postgresql,Postgresql 9.1,我有两张桌子“动物品种”和“ztmp.ztmp\U 509810\U动物”。在“动物品种”中,每种动物都有钥匙和品种名称以及百分比。很少有动物可能有两种不同比例的不同品种。现在根据“动物品种”中的动物键,我想更新“ztmp.ztmp_509810_anims_out” 我使用的代码我知道是错误的 update ztmp.ztmp_509810_anims_out set alt_id1 = ab.breed ,alt_id2 = pcnt ,alt_id3 = ab.br

我有两张桌子“动物品种”和“ztmp.ztmp\U 509810\U动物”。在“动物品种”中,每种动物都有钥匙和品种名称以及百分比。很少有动物可能有两种不同比例的不同品种。现在根据“动物品种”中的动物键,我想更新“ztmp.ztmp_509810_anims_out”

我使用的代码我知道是错误的

    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';
我可以在update语句中使用for循环吗

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个以上的品种,添加
品种[3]
pcnts[3]
等等。

为什么你认为你需要loop?。@Vao Tsun-使用loop是我的猜测。我不需要使用循环,但我无法理解如何解决它,否则…您的屏幕截图信息不太丰富-描述问题?我想使用动物键从“动物品种”表中更新“ztmp.ztmp_509810_anims_out”表中的品种及其百分比;这样,每个动物的品种及其百分比将显示在一行中。uf!我以为OP想用join从cte更新:)@Laurenz Albe-我们可以不用insert使用update语句吗?我已经将答案改写为
update
语句。