我有一个带有 json 字段的表,其中存储了对象数组。
我想查询此表,并通过使用某些条件过滤它们,为每个返回的行仅返回 json 数组对象的子集。
例如对于行:
id = 1, jsonColumn = [{ field: 'abc' },{ field: 'def' },{ field: 'ghi' }]
id = 2, jsonColumn = [{ field: 'abc' },{ field: '123' },{ field: '456' }]
id = 3, jsonColumn = [{ field: 'abc' },{ field: '789' },{ field: 'XXX' }]
我想选择所有行,并且每行应仅包含 jsonColumn 元素where field = 'abc'
。我只想过滤此列,而不返回数组中包含特定元素的行...
您可以使用json_array_elements
取消嵌套 JSON 和array_agg
过滤后将其嵌套回去。像这样的东西:
SELECT t.id, array_to_json(array_agg(j))
FROM your_table t, json_array_elements(t.jsonColumn) j
WHERE j->>'field' = 'abc'
GROUP BY id;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)