【问题标题】:determine no of layers of parent child relationship确定父子关系的层数
【发布时间】:2020-12-16 04:54:17
【问题描述】:

以下是我的表格中的数据结构: 备注:

P - 表示父级

c - 表示父级

父母可以有父母(有孩子) 但是一个孩子不能有一个孩子或任何一个父母。确定层/代。

Column1,Column2
1-p,2-p:
2-p,3-p:
2-p,4-c:
3-p,5-c

如何读取上述数据:

  • 1 有一个孩子叫 2;
  • 2 有孩子 3 和 4;
  • 3 有孩子 5。

所以基于上述逻辑'1'有3层。 如何编写查询以确定 Oracle 中的层数?

【问题讨论】:

  • 也许你可以用分层查询来做到这一点。
  • 您正在寻找的简称是“继承深度”。 Column1 和 Column2 实际上是什么意思?通常,您会在具有 ID 和 ParentID 列的表中看到单亲继承数据,但除非列是 ParentID、ID,否则这与示例中的数据不相符
  • stackoverflow.com/questions/26439791/…是ORACLE如何遍历这种表结构的一个例子

标签: sql oracle nested


【解决方案1】:

您可以使用分层查询:

SELECT column1,
       MAX( depth ) AS max_depth
FROM   (
  SELECT CONNECT_BY_ROOT( column1 ) AS column1,
         LEVEL AS depth
  FROM   table_name
  WHERE  CONNECT_BY_ISLEAF = 1
  CONNECT BY
         PRIOR Column2 = Column1
)
GROUP BY
       column1;

其中,对于样本数据:

CREATE TABLE table_name ( Column1, Column2 ) AS
SELECT '1-p','2-p' FROM DUAL UNION ALL
SELECT '2-p','3-p' FROM DUAL UNION ALL
SELECT '2-p','4-c' FROM DUAL UNION ALL
SELECT '3-p','5-c' FROM DUAL;

输出:

第 1 列 | MAX_DEPTH :-------- | --------: 1-p | 3 3-p | 1 2-p | 2

db小提琴here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2015-04-17
    • 2021-10-24
    • 2017-12-20
    • 1970-01-01
    • 2011-02-24
    相关资源
    最近更新 更多