oracle-结束层次结构表中的子节点

sc4hvdpw  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(230)

我试图从层次结构表中找到具有父节点id和子节点id的最低级别的子节点,如下所示。它还返回中级子节点。请帮助修改此查询并获得所需结果。
请建议将相同的查询转换为 Impala ,当我运行这个查询在色调它是显示错误-表格参考找不到。

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 |
+-------------+--------------+-------------+
57hvy0tb

57hvy0tb1#

标准 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演示
不幸的是,我不知道 Impala 的解决办法:(

相关问题