sql - 如何在 PostgreSQL 中使用数组进行批量更新?
问题描述
在PostgreSQL数据库中,我有一个名为的表services
,它有 4 列。是否可以通过数组进行大规模更新?我尝试了这样的代码,但它引发了错误:
SQL Error [0A000]: ERROR: set-returning functions are not allowed in WHERE
SQL:
UPDATE SERVICES
SET
NAME = UNNEST(ARRAY['NAME OF THE FIRST SERVICE', 'NAME OF THE SECOND SERVICE']),
ACTIVE = UNNEST(ARRAY[FALSE, TRUE]),
DESCRIPTION = UNNEST(ARRAY['DESCRIPTION OF THE FIRST SERVICE', 'DESCRIPTION OF THE SECOND SERVICE'])
WHERE
ID = UNNEST(ARRAY['e1433cd2-7591-4a74-b910-33ea89d87ecd', '6c27c413-4be2-4a89-bea0-e713445ebfe1']);
解决方案
您可以在子查询中取消嵌套它们:
UPDATE services s
SET name = x.name,
active = x.active,
description = x.description
FROM (SELECT UNNEST(ARRAY['NAME OF THE FIRST SERVICE', 'NAME OF THE SECOND SERVICE']) as name,
UNNEST(ARRAY[FALSE, TRUE]) as active,
UNNEST(ARRAY['DESCRIPTION OF THE FIRST SERVICE', 'DESCRIPTION OF THE SECOND SERVICE']) as description
UNNEST(ARRAY['e1433cd2-7591-4a74-b910-33ea89d87ecd', '6c27c413-4be2-4a89-bea0-e713445ebfe1']) as id
) x
WHERE s.id = x.id;
当单个 s 中有多个unnest()
s 时select
,Postgres 将它们并行地取消嵌套(而不是生成笛卡尔积)。行数是最大数组的行数,较短的数组用null
s 填充。
推荐阅读
- c# - 为国家下拉列表序列化对象
- r - 将包含总计和百分比的行添加到 DT 数据表
- c# - 使用 C# 登录远程计算机
- angular - 如何使用 angular、ng-zorro-antd 等配置 Tailwind css?
- bash - 带有单个点 (cd .) 的 chdir 的用途
- sql - SQL Server:检测列更改
- python - 在 Python 中将数字计数为字符串
- react-native - 是否可以更改 React Native 日历选定日期的样式?
- html - 无论我尝试什么,我的 CSS 文件都会出错
- javascript - 如何识别何时在 JavaScript 中使用 : 或 =?