我有一个包含两列的表,其中包含 ID 和 JSON 对象 (jsonb)。每个 json 对象都包含多个嵌套在对象内部的值(例如 url)。我可以使用 jsonb_path_query 使用 [*] 提取所有这些值,但它们以每行一个值的形式返回。如何以结果表与原始表具有相同行数的方式聚合返回值?
这是示例:
CREATE TABLE IF NOT EXISTS test (
oid integer,
object jsonb
);
INSERT INTO test
VALUES
(1, '{"links": [
{"title": "a", "url": "w"},
{"title": "b", "url": "x"}
]}'),
(2, '{"links": [
{"title": "c", "url": "y"},
{"title": "d", "url": "z"}
]}');
SELECT
oid,
jsonb_path_query(object, '$.links[*].url')
FROM test;
Run Code Online (Sandbox Code Playgroud)
select 查询返回下表:
| oid | jsonb_path_query |
| --- | ---------------- |
| 1 | w |
| 1 | x |
| 2 | y |
| 2 | z |
Run Code Online (Sandbox Code Playgroud)
但是,我想得到这个:
| oid | jsonb_path_query |
| --- | ---------------- |
| 1 | [w,x] |
| 2 | [y,z] |
Run Code Online (Sandbox Code Playgroud)
小智 6
使用jsonb_path_query_array()- 它将所有匹配项作为 (JSON) 数组返回
SELECT oid,
jsonb_path_query_array(object, '$.links[*].url')
FROM test;
Run Code Online (Sandbox Code Playgroud)
SELECT oid,
jsonb_path_query_array(object, '$.links[*].url')
FROM test;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1514 次 |
| 最近记录: |