1

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

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

1 回答 1

2

的,有办法。

假设当前 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;
于 2016-07-21T03:04:35.017 回答