Oracle - Конечные дочерние узлы из таблицы Hierarchy - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь найти дочерние узлы самого низкого уровня из таблицы иерархии, имеющие 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 |
+-------------+--------------+-------------+

1 Ответ

0 голосов
/ 31 января 2019

Стандартный 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: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...