该rCTE从另一侧遍历树:
WITH RECURSIVE cte AS ( SELECt id, parent_id, name, NULL::JSON AS children FROM people p WHERe NOT EXISTS ( -- only leaf nodes; see link below SELECt 1 FROM people WHERe parent_id = p.id ) UNIOn ALL SELECt p.id, p.parent_id, p.name, row_to_json(c) AS children FROM cte c JOIN people p ON p.id = c.parent_id )SELECt id, name, json_agg(children) AS childrenFROM cteGROUP BY 1, 2;
SQL提琴。
使用
json_agg()到每个节点聚集多个分支外
SELECT。
与您期望的结果之间的微小差异:
- 这包括
parent_id
在children
列中。 - 没有将单个节点包装到数组中。
都可以进行调整,但是我希望结果对您来说是可以的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)