如何在PostgreSQL中删除JSON字段内值为指定值的所有属性
完整补全方案(适配PostgreSQL)
补全后的更新语句:
UPDATE records SET payload = ( SELECT json_object_agg(key, value) FROM json_each(payload) WHERE value::INT != 3 ) WHERE parent = 1 AND EXISTS ( SELECT 1 FROM json_each(payload) WHERE value::INT = 3 );
占位符说明:
- 第一个
??(payload赋值部分):
(SELECT json_object_agg(key, value) FROM json_each(payload) WHERE value::INT != 3)
逻辑说明:先将JSON类型的payload拆分为独立的键值对,过滤掉值为3的属性后,重新聚合为新的JSON对象。
2. 第二个??(WHERE附加筛选条件):
EXISTS (SELECT 1 FROM json_each(payload) WHERE value::INT = 3)
逻辑说明:仅筛选出parent=1且payload中确实存在值为3的属性的记录,避免执行无意义的更新操作。
如果你的payload字段为JSONB类型,只需要将上述语句中的json_each替换为jsonb_each、json_object_agg替换为jsonb_object_agg即可。
内容的提问来源于stack exchange,提问作者user3768377
相关产品推荐
相关产品推荐

