You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于闭包表,能否用SQL实现指定顺序的树深度优先前序遍历?

基于闭包表实现树的深度优先前序遍历的SQL方案疑问

需要对树进行深度优先前序遍历,目标顺序为:
1
2
4
6
8
7
5
3

注意:节点的祖先未必拥有更小的节点编号。

闭包表数据

祖先后代路径长度
110
220
330
440
241
550
251
660
461
262
770
471
272
880
681
482
283

核心问题

是否可以通过SQL查询实现上述深度优先前序遍历顺序?

尝试的递归CTE方案

参考PostgreSQL文档7.8.2.1节「Search Order」,我写出了如下递归CTE查询:

WITH RECURSIVE search_tree(descendant, path) AS (
SELECT descendant, ARRAY[ROW(ct.ancestor, ct.descendant)]
FROM closure_table ct WHERE descendant = 2
UNION ALL
SELECT
ct.descendant, path || ROW(ct.ancestor, ct.descendant)
FROM closure_table ct, search_tree st
WHERE ct.ancestor = st.descendant AND ct.path_length = 1
)
SELECT * FROM search_tree ORDER BY path;

疑问

不确定这个递归CTE方案的执行效率如何。


内容的提问来源于stack exchange,提问作者Dante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:35:24