来自两个有序数组的单个更新查询
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;
所以,假设我有两个元素数量相同的有序数组,其中每个数组的每个索引都引用同一索引处的另一个数组
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;