Postgres递归JSON查询

时间:2019-03-11 09:05:47

标签: postgresql

我有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 } ] } ]

我该如何查询?

0 个答案:

没有答案