簡體   English   中英

使用CONNECT BY通過Oracle中的SQL查詢獲取層次結構中的所有父項和一個子項

[英]Using CONNECT BY to get all parents and one child in Hierarchy through SQL query in Oracle

我正在瀏覽一些關於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

有沒有更好的方法來做到這一點,一些更優化的解決方法?

您應該能夠使用子選擇(和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 * ,始終為實際需要的列命名。 這使您的查詢更易於閱讀,維護和優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM