【问题标题】:Using CONNECT BY to get all parents and one child in Hierarchy through SQL query in Oracle使用 CONNECT BY 通过 Oracle 中的 SQL 查询获取 Hierarchy 中的所有父母和一个孩子
【发布时间】:2010-03-31 07:41:38
【问题描述】:

我正在浏览之前关于 CONNECT BY 用法的一些帖子。我需要找到的是,如果我想获得所有的父母(即直到根)和一个节点的一个孩子,比如 4,该怎么办。

看来我将不得不使用以下两个的联合:-

 SELECT  * 
 FROM    hierarchy 
 START WITH id = 4
 CONNECT BY id = PRIOR parent
union
     SELECT  *
     FROM    hierarchy
     WHERE LEVEL =<2
     START WITH
     id = 4
     CONNECT BY
     parent = PRIOR id

有没有更好的方法来做到这一点,一些更优化的解决方法?

【问题讨论】:

    标签: sql oracle hierarchy


    【解决方案1】:

    您应该能够使用子选择(和DISTINCT)来查找4 的所有子项:

    Select Distinct *
    From hierarchy
    Start With id In ( Select id
                       From hierarchy
                       Where parent = 4 )
    Connect By id = Prior parent
    

    使用UNION,您至少可以从第二个查询中删除CONNECT BY

      Select *
      From hierarchy
      Start With id = 4
      Connect By id = Prior parent
    Union
      Select *
      From hierarchy
      Where parent = 4
    

    永远不要使用SELECT *,始终命名您实际需要的列。这使您的查询更易于阅读、维护和优化。

    【讨论】:

    • 当我们忽略一些显而易见的事情时,有时真的很有趣。联合部分是如此明显,但我认为我过于专注于 CONNECT BY 子句。是的,我知道不要使用 SELECT * 但只是试图缩短文本。 :) 谢谢。
    猜你喜欢
    • 2022-01-15
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 2019-01-14
    • 2021-07-04
    相关资源
    最近更新 更多