使用array_replace()更新数组中的多个值

时间:2014-05-08 20:47:05

标签: sql arrays postgresql sql-update

我正在尝试更新PostgreSQL中的表。

事实上,我正在尝试更新数组。我有一个表调用switch_ids的OLD_ID,NEW_ID,我有表TABLE_TO_UPDATE,列my_array(一个id数组)。我想修改这个数组中的一些id。我做了类似的事情:

UPDATE TABLE_TO_UPDATE
SET my_array=array_replace(my_array,OLD_ID,NEW_ID)
FROM switch_ids
WHERE switch_ids.old_id = ANY(my_array);

问题在于,当同一行(my_array)中有多个值要更改时,它只会更改一个值而不是全部值。我怎样才能同时更新所有内容?嵌套电话?

1 个答案:

答案 0 :(得分:1)

必定存在某种误解。 array_replace()(pg 9.3 + )替换项目的所有出现次数,而不仅仅是第一次出现。考虑:

SELECT array_replace(ARRAY[5,1,2,5,4,5], 5, 3);

结果:

{3,1,2,3,4,3}

SQL Fiddle.

Per documentation:

  

用新值

替换每个等于给定值的数组元素