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

Single update query from two ordered arrays

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

values = [ 5, 7, 8, 9 ]
keys = ['a', 'b', 'c', 'd' ]

而不是在循环中执行多个更新

for thing, index in values
    UPDATE table SET column1 = thing WHERE column2 = keys[index]

有没有办法将这些数组拉入 Postgres 并在单个 UPDATE 查询中使用它们?

类似于:

UPDATE table SET column1 = values[?] WHERE column2 = keys[?]

是的有办法

假定当前的 Postgres 9.5 因为您没有指定。使用 unnest() 的新形式并行取消嵌套多个数组:

并在普通 UPDATE 中使用派生的 table:

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;