PostgreSQL 里对 json 多个 key 同时操作如何用一条 SQL 完成

2019-07-08 14:56:12 +08:00
 imherer

格式是jsonb,数据如下:

{"1003": 100, "1004": 100, "1005": 100, "1006": 100, "1007": 100, "1008": 100}

假如我现在想把1003,1004的数量更新成 200,同时将1005删除,一条 SQL 如何实现呢?

只操作一个 key 可以这样实现,但是多个怎么实现呢?

UPDATE table SET field = JSONB_SET(field, '{1003}','200',true)

3419 次点击
所在节点    PostgreSQL
3 条回复
Takamine
2019-07-08 15:54:39 +08:00
同时更新多个字段:
UPDATE table SET field = field || '{"1003":200 ,"1004":200}'::jsonb where xxxxxx。
感觉把两个不同的 DML 操作丢一起不太好。
imherer
2019-07-08 17:00:46 +08:00
@Takamine 嗯,谢谢,已经解决了

因为在实际业务中,有可能会出现数量减少的情况。 当数量减到 0 的时候,就要把这个 key 删掉。
这样就出现了,有的 key 是更新数量,有的 key 是直接删除

要是不放一起的话,实际上是更新同一个字段,但是分 2 条 SQL 分别操作 2 次数据库,是不是也不太好?
reus
2019-07-08 17:05:05 +08:00
update table set filed = jsonb_strip_nulls(field || '{"1003": 200, "1004": 200, "1005": null}')

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/581008

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX