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

标签 sql arrays postgresql sql-update unnest

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

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 中使用派生表:

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;

关于sql - 来自两个有序数组的单个更新查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38492931/

相关文章:

sql - 查询大量记录以找到 1 个字段不同但另外 2 个字段匹配的模式(即使颠倒)

mysql - 在同一个表中为 2 个不同的分组依据函数创建 2 列

c++ - 如何按特定模式对字符串数组进行排序

jquery - 如何将整数数组从 asp.net mvc Controller 操作传递回 jquery 函数

sql - 如何一次从三个表中返回行?

mysql - 对同一个表中的两个不同值使用 count

sql - 调用查询复杂的列

arrays - Ruby: "upserting"散列中数组值的更惯用方式

sql - 无法在 phpPgAdmin 中创建表

c++ - 连接到 postgresql 数据库的奇怪错误