Postgresql从JSONB字段中的对象数组获取密钥
这里是jsonb列的虚拟数据Postgresql从JSONB字段中的对象数组获取密钥,postgresql,jsonb,postgresql-json,Postgresql,Jsonb,Postgresql Json,这里是jsonb列的虚拟数据 [ { "name": [ "sun11", "sun12" ], "alignment": "center", "more": "fields" }, { "name": [ "sun12", "sun13" ], "alignment": "center" }, { "name": [ "sun14", "sun15" ] }] 我想从对象的jsonb数组中获取所有名称键值…需要输出- [ [ "sun11", "sun12" ], [ "sun12", "s
[ { "name": [ "sun11", "sun12" ], "alignment": "center", "more": "fields" }, { "name": [ "sun12", "sun13" ], "alignment": "center" }, { "name": [ "sun14", "sun15" ] }]
我想从对象的jsonb数组中获取所有名称键值…需要输出-
[ [ "sun11", "sun12" ], [ "sun12", "sun13" ], [ "sun14", "sun15" ] ]
问题是,我能够通过提供索引(如0、1等)来获取name键值
SELECT data->0->'name' FROM public."user";
[ "sun11", "sun12" ]
但是我无法从同一个对象数组中获取所有的名称键值,我只想从json对象数组中获取所有的键值。任何帮助都会有帮助。谢谢(首先是最终查询,下面是中间步骤)
sonb\u array\u elements()
将每个数组元素展开为一行->
运算符为属性名提供数组;然后,jsonb_agg()
将所有提取的数组再次放入一个数组中SELECT DISTINCT sub.name FROM (
SELECT
jsonb_build_object('name', p.data->'name') AS name
FROM user AS u
WHERE u.data IS NOT NULL
) sub
WHERE sub.name != '{"name": null}';
你能解释一下这是如何工作的吗?
elems.value->“name”
?或者elems.vlaue是什么意思?jsonb_数组_元素创建一个名为“value”的新列。在此行中,已插入所有数组元素。您可以通过elems.value(参见fiddle)选择它们。现在,可以要求这些元素中的每一个元素输入键“name”的值。
SELECT DISTINCT sub.name FROM (
SELECT
jsonb_build_object('name', p.data->'name') AS name
FROM user AS u
WHERE u.data IS NOT NULL
) sub
WHERE sub.name != '{"name": null}';