【发布时间】:2019-04-02 22:11:12
【问题描述】:
假设我有以下表格:
表帐户:
parent_id | id
......
10 | 101
20 | 201
30 | 301
30 | 302
40 | 401
40 | 402
401 | 4011
401 | 4012
4012 | 40121
和表accounts_tree:
ancestor | descentant | depth
1 | 10 | 1
1 | 20 | 1
1 | 30 | 1
1 | 40 | 1
1 | 101 | 2
1 | 201 | 2
1 | 301 | 2
1 | 302 | 2
1 | 401 | 2
1 | 402 | 2
1 | 4011 | 3
1 | 4012 | 3
1 | 40121 | 4
10 | 101 | 1
20 | 201 | 1
30 | 301 | 1
30 | 302 | 1
40 | 401 | 1
40 | 402 | 1
40 | 4011 | 2
40 | 4012 | 2
40 | 40121 | 3
401 | 4011 | 1
401 | 4012 | 1
4012 | 40121 | 1
我需要的是显示所有孩子的帐户ID(父母),并为每个孩子显示他们的孩子,按深度升序分组; 到目前为止我用过:
SELECT
a.parent_id,
a.id,
p.depth
FROM
accounts a
INNER JOIN account_tree p ON a.id = p.descendant
WHERE
p.ancestor = 1
AND p.depth <= 4
ORDER BY
a.parent_id;
返回所有按父 ID 排序的帐户。 我的期望是:
parent_id | id | depth
1 | 10 | 1
10 | 101 | 2
1 | 20 | 1
20 | 201 | 2
1 | 30 | 1
30 | 301 | 2
30 | 302 | 2
1 | 40 | 1
40 | 401 | 2
401 | 4011 | 3
401 | 4012 | 3
4012 | 40121 | 4
40 | 402 | 2
我必须提到,在我正在处理的项目中,有 500 多个帐户,并且它们的 id 不像我的示例中那样“可预测”编号,并且深度超过 5 个级别。
【问题讨论】:
标签: sql database postgresql select tree