我正在尝试删除jsonb有一个或多个键的记录。
我的数据-
| 身份证|jsonb_col|
| --------------|--------------|
| 1|[{"unit": "sale", "group": ["spares"]}]
|
| 第二章|[{"unit": "sale"}]
|
| 三|[{"member": "j1"}]
|
删除key in(unit,group)后,我的数据应该是这样的-
| 身份证|jsonb_col|
| --------------|--------------|
| 三|[{"member": "j1"}]
|
我试过用cte查询-
WITH keys AS (
SELECT jsonb_object_agg(key, null) AS keys
FROM unnest(ARRAY['unit', 'group']) AS key
)
DELETE FROM my_table
WHERE jsonb_col @> (SELECT keys FROM keys)
这会让我删除0。
其中我的选择查询单独返回下面的数据-
{"unit": null, "group": null}
在jsonb中没有cte的情况下,有没有其他方法可以删除键列表?
2条答案
按热度按时间sd2nnvve1#
一种选择是使用EXISTS子查询,该子查询迭代数组元素并检查其中一个元素是否包含键
另一种选择是使用JSON路径查询
lsmepo6l2#
您也可以使用jsonb_path_exists。