我有2张桌子
CREATE TABLE parent (
id SERIAL PRIMARY KEY,
label VARCHAR
);
CREATE TABLE child (
id SERIAL PRIMARY KEY,
label VARCHAR,
child_id INTEGER,
parent_id INTEGER
);
子元素可以引用其递归。
我想查询其所有子级的父母作为json数组。
对于单级我有
SELECT
p.label, jsonb_agg(jsonb_build_object('id', c.id, 'label', c.label, 'child_id', c.child_id, 'parent_id', c.parent_id))
as children
FROM parent p LEFT JOIN child c on c.parent_id = p.id GROUP BY p.id
这让我
[ { id: 1,
label: 'parent 1',
children:
[ { id: 1,
label: 'child 1',
child_id: null,
parent_id: 1 },
{ id: 2,
label: 'child 2',
child_id: 1,
parent_id: 1 } ] } ]
这适用于单个级别,但是我想要它的所有子级,像这样
[ { id: 1,
label: 'parent 1',
children:
[ { id: 1,
label: 'child 1',
child_id: null,
parent_id: 1
children: [
{ id: 2
label: 'child 1s child'
child_id: 1,
parent_id: 1 }
] },
{ id: 3,
label: 'other child',
child_id: null,
parent_id: 1 } ] } ]
我该如何查询?