从 JSONB 对象数组中删除整个对象的 PostgreSQL 调用是什么
What is the PostgreSQL call to remove an whole object from a JSONB array of Objects
table:测试 1
jsonB 列:COLUMN1
[{a: 1, b: 2, c:3},
{a: 4, b: 5, c:6},
{a: 7, b: 8, c:9}]
我想 select a = 4 的值并删除它所属的整个对象以获得如下结果
[{a: 1, b: 2, c:3},
{a: 7, b: 8, c:9}]
我可以用WHERE COLUMN1->>'a' = 4
定位记录
但我无法弄清楚或如何找到这个基本用例:例如,从数组中删除一个对象作为 JSONB 列的一部分
一条或多条记录
是的,您可以通过 jsonb_array_elements()
函数的贡献将等式替换为不等式来反向使用过滤逻辑,如 WHERE COLUMN1->>'a' != 4
,然后应用 jsonb_agg()
函数,如下所示:
SELECT ID, jsonb_agg(elm) AS "Result"
FROM tab t
CROSS JOIN jsonb_array_elements(jsdata) AS elm
WHERE (elm ->> 'a')::int != 4
GROUP BY ID
创建TABLE 选项卡(ID INT,jsdata jsonb)
插入选项卡值
(1,'[{"a": 1, "b": 2, "c":3},{"a": 4, "b": 5, "c":6},{"a": 7, "b": 8, "c":9}]'::jsonb),
(2,'[{"a": 4, "b": 2, "c":3},{"a": 9, "b": 5, "c":6},{"a": 7, "b": 8, "c":9}]'::jsonb)
更新选项卡 t1
SET jsdata = ( SELECT jsonb_agg(榆树)
从选项卡 t2
交叉连接 jsonb_array_elements(jsdata) 作为榆树
WHERE (elm->>'a')::int != 4
和 t2.ID = 2
按 t2.ID 分组)
其中 t1.ID = 2
结果:
1,'[{“a”:1,“b”:2,“c”:3},{“a”:4,“b”:5,“c”:6},{“a”:7 , "b": 8, "c":9}]',
2,'[{"a": 9, "b": 5, "c":6},{"a": 7, "b": 8, "c":9}]'
table:测试 1 jsonB 列:COLUMN1
[{a: 1, b: 2, c:3},
{a: 4, b: 5, c:6},
{a: 7, b: 8, c:9}]
我想 select a = 4 的值并删除它所属的整个对象以获得如下结果
[{a: 1, b: 2, c:3},
{a: 7, b: 8, c:9}]
我可以用WHERE COLUMN1->>'a' = 4
但我无法弄清楚或如何找到这个基本用例:例如,从数组中删除一个对象作为 JSONB 列的一部分
一条或多条记录
是的,您可以通过 jsonb_array_elements()
函数的贡献将等式替换为不等式来反向使用过滤逻辑,如 WHERE COLUMN1->>'a' != 4
,然后应用 jsonb_agg()
函数,如下所示:
SELECT ID, jsonb_agg(elm) AS "Result"
FROM tab t
CROSS JOIN jsonb_array_elements(jsdata) AS elm
WHERE (elm ->> 'a')::int != 4
GROUP BY ID
创建TABLE 选项卡(ID INT,jsdata jsonb)
插入选项卡值 (1,'[{"a": 1, "b": 2, "c":3},{"a": 4, "b": 5, "c":6},{"a": 7, "b": 8, "c":9}]'::jsonb), (2,'[{"a": 4, "b": 2, "c":3},{"a": 9, "b": 5, "c":6},{"a": 7, "b": 8, "c":9}]'::jsonb)
更新选项卡 t1 SET jsdata = ( SELECT jsonb_agg(榆树) 从选项卡 t2 交叉连接 jsonb_array_elements(jsdata) 作为榆树 WHERE (elm->>'a')::int != 4 和 t2.ID = 2 按 t2.ID 分组) 其中 t1.ID = 2
结果: 1,'[{“a”:1,“b”:2,“c”:3},{“a”:4,“b”:5,“c”:6},{“a”:7 , "b": 8, "c":9}]', 2,'[{"a": 9, "b": 5, "c":6},{"a": 7, "b": 8, "c":9}]'