栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

带有jsonb_set()的UPDATE仅影响嵌套数组中的一个对象

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

带有jsonb_set()的UPDATE仅影响嵌套数组中的一个对象

解释

中再选择

FROM
您的从句
UPDATe
返回 _ 3 行。但是目标表中的每一行只能在单个命令中更新
_一次
UPDATE
。结果是您只能看到这三行 之一 的效果。

或者,用手册的话来说:

使用时

FROM
,应确保该联接为要修改的每一行最多产生一个输出行。换句话说,目标行不应与其他表中的一行合并。如果是这样,那么将仅使用联接行之一来更新目标行,但是将很难预测将使用哪一行。

另外:不要将您的子查询称为“
cte”。这不是通用表表达式。

恰当的
UPDATe

UPDATE table_ tSET    value_ = jsonb_set(value_, '{iProps}', sub2.new_prop, false)FROM  (   SELECt id        , jsonb_agg(jsonb_set(prop, '{value, rules}', new_rules, false)         ORDER BY idx1) AS new_prop   FROM  (      SELECt t.id, arr1.prop, arr1.idx1, jsonb_agg(jsonb_set(rule, '{ao,sc}', rule #> '{ao,sc,name}', false) ORDER BY idx2) AS new_rules      FROM table_ t         , jsonb_array_elements(value_->'iProps')       WITH ORDINALITY arr1(prop,idx1)         , jsonb_array_elements(prop->'value'->'rules') WITH ORDINALITY arr2(rule,idx2)      GROUP  BY t.id, arr1.prop, arr1.idx1      ) sub1   GROUP  BY id   ) sub2WHERe t.id = sub2.id;

db<>[在这里](https://dbfiddle.uk/?rdbms=postgres_9.5&fiddle=06a3afecd8f9e42647779da1c924d4de)拨弄

使用

jsonb_set()
聚集它们放回阵列之前的每个对象(数组元素)上。首先在叶子级别,然后在更深层次。

我加

id
PRIMARY KEY
表。我们需要一些唯一的列来使行分开。

添加的内容

ORDER BY
可能是必需的,也可能不是必需的。添加它以保证原始订单。

当然,如果您的数据与样本一样规则,则具有专用列的关系设计可能是更简单的选择。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/506613.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号