来自两个有序数组的单个更新查询

时间:2016-07-21 00:29:24

标签: sql arrays postgresql sql-update unnest

所以,假设我有两个具有相同元素数量的有序数组,其中每个数组的每个索引引用同一索引处的另一个

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[?]

1 个答案:

答案 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;