【问题标题】:Oracle SQL Hierarchical Query to know path between two ElementsOracle SQL 分层查询以了解两个元素之间的路径
【发布时间】:2013-07-22 08:22:17
【问题描述】:
1 | +----------------+--------------------------------+ | | | 2 7 9 | | | +--+--+ | +--+--+ | | | | | 3 4 8 10 12 | | +-+-+ | | | | 5 6 11

注意:我无法发布图片,因此请尝试将上面的数字视为以 1 为根节点的树结构。

我如何使用分层查询来获取两个节点之间的路径

例如:11 和 4 之间的路径

即输出应该是

11-10
10-9
9-1
1-2
2-4

【问题讨论】:

    标签: sql oracle hierarchical-query


    【解决方案1】:

    你可以从叶子开始往上爬:

    select p_n || ' - ' || n
    from t
    where p_n is not null
    start with n = 11
    connect by prior p_n = n
    order by level desc
    

    Here is a sqlfiddle demo


    编辑:好的,这让事情变得有点复杂......

    你可以从两个节点向上爬,但是你必须删除重复的路径(例如在 6 和 3 之间,不需要通过根 1)

    试试这样的:

    select  the_path 
    from
    (select case when connect_by_root(n) = 11 then p_n || ' - ' || n else n || ' - ' || p_n end the_path,
     count(*) over (partition by n, p_n) cnt
    from t
    where p_n is not null
    start with n in (11, 4)
    connect by prior p_n = n)
    where cnt = 1;
    

    Here is another sqlfiddle demo

    【讨论】:

    • 感谢您的回复...我没有正确发布我的问题..现在更新了!!
    猜你喜欢
    • 2017-06-03
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    相关资源
    最近更新 更多