SQL中的树深度

Mar*_*ian 4 sql optimization query-optimization

假设有一个被调用的表tree_node,它调用了主键,id并且调用了一个可空列,parent_id并且该表嵌入了一个树结构(或一个林),如何以有效的方式计算树/林中节点的深度在SQL?

Ant*_*sma 6

你需要递归功能.使用递归查询,这将是:

WITH RECURSIVE node_ancestors(node_id, parent_id) AS (
        SELECT id, id FROM tree_node WHERE id IN (1, 2, 3)
    UNION ALL
        SELECT na.node_id, tree_node.parent_id
            FROM node_ancestors AS na, tree_node
            WHERE tree_node.id = na.parent_id AND tree_node.parent_id IS NOT NULL
)
SELECT node_id, COUNT(parent_id) AS depth FROM node_ancestors GROUP BY node_id;
Run Code Online (Sandbox Code Playgroud)

其他选项是在存储过程中进行递归,在应用程序中执行递归并限制递归量并使用大量连接.(对于非平凡的深度,最后一个选项并不是真正有效)

  • 不错的功能.不幸的是,并不存在于所有SQL实现中 (3认同)