所以,假设我有两个具有相同元素数量的有序数组,其中每个数组的每个索引引用同一索引处的另一个
values = [ 5, 7, 8, 9 ]
keys = ['a', 'b', 'c', 'd' ]
而不是在循环中执行多个UPDATES
for thing, index in values
UPDATE table SET column1 = thing WHERE column2 = keys[index]
有没有办法将这些数组拉入Postgres并在单个UPDATE
查询中使用它们?
类似的东西:
UPDATE table SET column1 = values[?] WHERE column2 = keys[?]
答案 0 :(得分:1)
是有办法。
假设您没有指定当前的Postgres 9.5。使用新形式的unnest()
来并行排除多个数组:
并在普通UPDATE
中使用派生表:
UPDATE tbl t
SET column1 = a.value
FROM unnest ('{5, 7, 8, 9}'::int[]
,'{a, b, c, d}'::text[]) AS a(value, key)
WHERE t.column2 = a.key;