我希望在一条语句中更新 PostgreSQL 和 Go 中的多行。有没有办法做类似下面的事情?
UPDATE table
SET column_a = "FINISH",
column_b = 1234
WHERE id = '1',
column_a = "UNFINISH",
column_b = 3124
WHERE id = '2'
如果用go语言执行的话,有没有例子?
最佳答案
在 Postgres 中执行此操作的最有效方法是使用 UNNEST
。这使您可以为每列传递一个参数(而不是行数 x 列数)。对于您的示例,这看起来像:
UPDATE table
SET
column_a=bulk_query.updated_column_a,
column_b=bulk_query.updated_column_b
FROM
(
SELECT * FROM UNNEST(
?::TEXT[],
?::TEXT[],
?::INT[]
) AS t(id, updated_column_a, updated_column_b)
) AS bulk_query
WHERE
users.id=bulk_query.id
然后可以传递三个参数:
[
["1", "2"],
["FINISH", "UNFINISH"],
[1234, 3124]
]
这种方法的优点是,无论您要更新多少行,您都只需要这 3 个参数。
我在这篇博文中写了有关此主题的更多内容:https://www.atdatabases.org/blog/2022/01/21/optimizing-postgres-using-unnest#update-multiple-records-to-different-values-in-a-single-query
关于sql - 使用 PostgreSQL 批量更新同一查询中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62888585/