【问题标题】:Oracle - End Child nodes from Hierarchy tableOracle - 从层次结构表中结束子节点
【发布时间】:2019-01-31 15:35:05
【问题描述】:

我正在尝试从具有 parent_node_id 和 child_node_id 的层次结构表中找到最低级别的子节点,如下所示。 它也返回中级子节点。请帮助修改此查询并获得所需的结果。

请建议将相同的查询转换为 Impala,当我在 HUE 中运行此查询时,它显示错误 - 未找到 tableR 参考。

WITH tableR (parent_node_id, child_node_id)
             AS (SELECT e.parent_node_id, e.child_node_id
                   FROM hierarchy e
                  WHERE     parent_node_id IN (select parent_node_id from hierarchy)
                 UNION ALL
                 SELECT e.parent_node_id, e.child_node_id
                   FROM hierarchy e 
                        INNER JOIN tableR d
                           ON e.parent_node_id = d.child_node_id
                  )
        SELECT parent_node_id, child_node_id
          FROM tableR

源表:

+-------------+--------------+-------------+
    |child_node_id|parent_node_id| child_desc  |
    +-------------+--------------+-------------+
    |     C1      |      P1      |     Private |
    +-------------+--------------+-------------+
    |     C2      |      P2      |     Public  |     
    +-------------+--------------+-------------+
    |     C11     |      C1      |     Party   |
    +-------------+--------------+-------------+
    |     C12     |      C11     |     Equity  |
    +-------------+--------------+-------------+
    |     123     |      C12     |   Placement |
    +-------------+--------------+-------------+

预期输出:

+-------------+--------------+-------------+
|parent_node  |lowest_l_child| child_desc  |
+-------------+--------------+-------------+
|     P1      |      123     |  Placement  |
+-------------+--------------+-------------+
|      P2     |       C2    |    Public    |
+-------------+--------------+-------------+
|     C1      |      123     |  Placement  |
+-------------+--------------+-------------+
|     C11     |      123     |   Placement |
+-------------+--------------+-------------+
|     C12     |    123       |   Placement |
+-------------+--------------+-------------+

【问题讨论】:

    标签: oracle hive impala


    【解决方案1】:

    带有过滤叶的标准connect by 查询给出了预期的输出:

    select connect_by_root(parent_node_id) root_parent, child_node_id, child_desc
      from hierarchy h
      where connect_by_isleaf = 1
      start with parent_node_id in (select parent_node_id from hierarchy)
      connect by prior child_node_id = parent_node_id
    

    dbfiddle demo

    不幸的是,我不知道 Impala 的解决方案:(

    【讨论】:

    猜你喜欢
    • 2019-06-26
    • 2019-07-27
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多