2

我在使用CONNECT BYOracle 中的子句查找分层数据时遇到问题。让我举个例子:A是我的父部分,它有子部分B,B也有一个子部分C。当我使用该CONNECT BY子句时,我能够获得所有三个级别,但我只想要最顶层,即一个。

4

3 回答 3

8

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
于 2013-08-07T18:07:59.703 回答
2

我正在为具有一棵或多棵树(分层数据)的表添加此解决方案。

从树中某处的一个节点(行)(分层数据)开始,想要找到顶部节点(根)。

该查询利用了树的唯一顶部节点(根)没有父节点的事实,这是任何树结构中顶部节点(根)的一个非常常见的属性。

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
于 2018-03-14T17:18:59.933 回答
0
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
于 2018-04-22T10:33:01.303 回答