Mr.Tananki
Mr.Tananki

Reputation: 489

Update a table from another table

I have got 2 tables "animal_breeds" and "ztmp.ztmp_509810_anims_out". In "animals breed" every animal has key and breed name and percentage. Few animals might have 2 different breeds with different percentage. Now based on the animals key in "animals_breeds" i want to update "ztmp.ztmp_509810_anims_out"

enter image description here

i am using this code which i know is wrong

    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';

could i use a for loop inside an update statement?

Upvotes: 2

Views: 31

Answers (1)

Laurenz Albe
Laurenz Albe

Reputation: 248305

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;

If there can be more than 2 breeds per animals_key, add breeds[3] and pcnts[3] and so on.

Upvotes: 3

Related Questions