连接by子句以获得层次结构的顶部

时间:2013-08-07 18:00:56

标签: oracle connect-by

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

3 个答案:

答案 0 :(得分:6)

Oracle可以使用LEVEL pseudocolumn

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分: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