2017-05-09 101 views
2

我有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

你的屏幕截圖是不是太翔實 - 描述問題? –

回答

3
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」語句。 –