簡體   English   中英

通過子句連接以獲取層次結構的頂部

[英]Connect by clause to get the top of hierarchy

在Oracle中使用CONNECT BY子句查找分層數據時,我遇到了一個問題。 讓我舉個例子:A是我的父部件,它有B子部件,而B也有C子部件。當我使用CONNECT BY子句時,我能夠獲得所有三個級別,但我只想要最高級,即A。

Oracle有一個LEVEL偽列 ,您可以使用:

SELECT
  myTable.ID,
  myTable.ParentID
FROM myTable
WHERE LEVEL = 1
CONNECT BY PRIOR myTable.ID = myTable.ParentID

要從任何級別查找頂級(根)值,請在列名之前加上CONNECT_BY_ROOT運算符:

SELECT
  myTable.ID,
  myTable.ParentID,
  CONNECT_BY_ROOT myTable.ID AS "Top Level ID"
FROM myTable
CONNECT BY PRIOR myTable.ID = myTable.ParentID

我正在為具有一棵或多棵樹的表(分層數據)添加此解決方案。

從樹中某處的一個節點(行)(分層數據)開始,想要找到頂部節點(根)。

查詢花費的事實, 唯一的一棵樹的頂部節點(根)沒有父母,這是在任何樹狀結構的頂層節點(根)的一個非常普遍的屬性優勢。

SELECT
  c.id
FROM 
  node c
WHERE
  c.parent_id is null
CONNECT BY PRIOR
  c.parent_id = c.id
START WITH
  c.id = 1059002615
SELECT * FROM (
  SELECT CONNECT_BY_ROOT myTable.ID AS "Top Level ID"
  FROM myTable
  CONNECT BY PRIOR myTable.ID = myTable.ParentID
)
WHERE myTable.ParentID IS NULL

暫無
暫無

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

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