oracle sql query иерархический запрос, чтобы найти верхний уровень

У меня есть таблица оракула, которая содержит столбец ID, столбец ID_child и несколько полей фактов. Я знаю идентификатор и хочу найти его родителя верхнего уровня. Идентификатор, который я знаю, будет помещен в поле ID_child, и идентификатор будет его родителем. Этот запрос работал, но я получаю только одну строку, которую могу сделать с помощью обычного запроса sql. Как получить идентификатор верхнего уровня?

SELECT
item_tbl.id, item_tbl.id_child
FROM item_tbl
START WITH item_tbl.id_child = 12510646
CONNECT BY PRIOR item_tbl.id_child = item_tbl.id

результаты, которые я получаю:

ID               ID_CHILD
12512162         12510646

person Daniel C    schedule 24.08.2017    source источник
comment
Обратное соединение операторами. у вас есть: CONNECT BY PRIOR item_tbl.id_child = item_tbl.id изменить его на CONNECT BY PRIOR = item_tbl.id =item_tbl.id_child In connect by; порядок имеет значение! вы можете добавить уровень и порядок по убыванию уровня, чтобы увидеть родителя к дочернему элементу, или использовать другие методы в рамках соединения, чтобы увидеть путь.   -  person xQbert    schedule 24.08.2017
comment
Это сработало**. Я изменил это, и теперь я поднимаю каждый уровень вверх.   -  person Daniel C    schedule 25.08.2017


Ответы (2)


Например: Порядок подключения по делам; Родитель должен быть слева.

With item_tbl (ID, ID_CHILD) as 
(SELECT 1,2 from dual UNION ALL
SELECT 2,3 from dual UNION ALL
SELECT 3,4 from dual)
SELECT
item_tbl.id, item_tbl.id_child, level
FROM item_tbl
START WITH item_tbl.id_child = 4
CONNECT BY PRIOR item_tbl.id= item_tbl.id_child
Order by level desc;
person xQbert    schedule 24.08.2017
comment
Спасибо за вашу помощь, которая сработала. Наконец-то я получил иерархический запрос, чтобы получить результаты, которые я обработал или понял. - person Daniel C; 25.08.2017

Как получить верхний ID?

Вы можете использовать псевдостолбец CONNECT_BY_ISLEAF:

SELECT id, id_child
FROM   item_tbl
WHERE  CONNECT_BY_ISLEAF = 1
START WITH id_child = 12510646
CONNECT BY PRIOR id = id_child

Если это не сработает, попробуйте поменять местами условия в предложении CONNECT BY.

person MT0    schedule 24.08.2017