gpt4 book ai didi

sql - 使用树顺序从表中选择行

转载 作者:行者123 更新时间:2023-11-29 11:20:52 26 4
gpt4 key购买 nike

我的表女巫包含字段:id、parent_id、name(等)

我想在“树旅行订单”中订购这张 table 。

id  parent_id
1, 0
3, 1
5, 1

2, 0
8, 2

4, 0
9, 4

(...)

简而言之:获取根节点,附加所有子节点,获取下一个根节点附加子节点等。

最佳答案

根据你的描述,我假设你的意思是广度优先顺序,这可以使用 WITH RECURSIVE 查询(PostgreSQL 8.4+)轻松完成:

WITH RECURSIVE tree 
AS
(
SELECT
node_name, id, parent_id, NULL::varchar AS parent_name
FROM foo
WHERE parent_id IS NULL
UNION
SELECT
node_name, f1.id, f1.parent_id, tree.node_name AS parent_name
FROM
tree
JOIN foo f1 ON f1.parent_id = tree.id
)
SELECT node_name, empno, parent_id, node_name FROM tree;

您还可以使用以下 SQL 使用深度优先顺序:

WITH RECURSIVE tree 
AS
(
SELECT
node_name, id, parent_id, NULL::varchar AS parent_name, id::text AS path
FROM foo WHERE parent_id IS NULL
UNION
SELECT
node_name, f1.id, f1.parent_id, tree.node_name AS parent_name, tree.path || '-' || f1.id::text AS path
FROM
tree
JOIN foo f1 ON f1.parent_id = tree.id
)
SELECT node_name, empno, parent_id, node_name, path FROM tree ORDER BY path;

关于sql - 使用树顺序从表中选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3709292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com