PostgreSQL检查json值是否含指定属性并删除对应数据行
操作需求
- 目标:根据表中JSON类型的
details列的字段特征,删除符合条件的数据行 details列存储的JSON结构示例:
{ "tax": 0, "note": "", "items": [ { "price": "100", "quantity": "1", "description": "Test" } ] }
- 删除判定规则:当
details列下items数组内的对象不包含name字段时,删除对应行
前置规则:
items数组内的所有对象字段结构完全一致,要么全部包含name字段,要么全部不包含该字段,无需处理数组内字段结构不统一的场景
实现方法(以MySQL 5.7及以上版本为例,其他支持JSON路径查询的数据库逻辑通用)
利用给定的前置规则,不需要遍历整个items数组,只需要判断数组第一个元素是否存在name字段即可完成判定。
- 先执行查询语句校验待删除的数据,避免误删:
-- 把your_table替换成你实际的表名 SELECT * FROM your_table WHERE details->'$.items[0].name' IS NULL;
- 确认查询出的结果都是需要删除的数据后,执行删除语句:
DELETE FROM your_table WHERE details->'$.items[0].name' IS NULL;
如果你的环境不支持->简写语法,可以用标准JSON函数写法,效果完全一致:
DELETE FROM your_table WHERE JSON_EXTRACT(details, '$.items[0].name') IS NULL;
内容的提问来源于stack exchange,提问作者Toni Bardina Comas
相关产品推荐
相关产品推荐

