我有一个包含jsonb列"详细信息"的表格:

{"Type": "VIP", "Quantity": 1}

我想要UPDATE列,使用查询将值从"Type"字段复制到新的"Subscription"字段,并更改值"vip"->2.exp如下:

{"Type": 2, "Quantity": 1, "Subscription": "VIP"}

我已经try 了脚本,但收到错误"无法提取标量值"

Update "Media" set "Details" = jsonb_set("Details", '{Subscription}'::text[],
            (select res.value from jsonb_array_elements("Details" -> 'Type') as res), true)

怎么啦?请帮助我们找到一个解决方案.

推荐答案

使用串联运算符:

update "Media" 
set "Details" = 
    "Details" || 
    jsonb_build_object('Subscription', "Details"->'Type') || 
    '{"Type": 2}';

db<>fiddle.分钟内进行测试

根据the documentation:

连接两个对象会生成一个包含其键的并集的对象,当存在重复的键时,会获取第二个对象的值.

因此,当您想要修改键的值时,可以将键与新值连接在一起.

Sql相关问答推荐

使用SQL旋转表的列(Snowflake)

我如何计算字母a出现的字符串的次数?

部分匹配表中元素的MariaDB查询查找结果

一个SQL查询将在需要的地方多次返回同一成员

Django将字符串筛选为整数?

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

为什么TRY_CONVERT返回一个XML验证错误而不是NULL?

SQL:如何将相应位置的两个数组中的元素组合在一起

使用DatePart函数对日期时间值进行分组

IF NOT EXISTS子查询的性能瓶颈

将两列相加为同一表中的行的查询

如何使用SQL生成数据的滚动3天总和

如何根据 SQL 中的阈值标记一个集群中的所有值?

Postgresql 生成器列导致语法错误

如何在 JSONB 数组的每个对象中添加新的键值对- PostgreSQL

使用给定的变量对在循环中执行更新语句

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

SQL 查询以填充单个列中的所有值

有没有一种方法可以将始终遵循序列的单个字段的值组合起来,以创建每个 ID 的所有移动?

PostgreSQL Select 具有两列的自引用