#sql #oracle #oracle11g #oracle-sqldeveloper #plsqldeveloper
#sql #Oracle #oracle11g #oracle-sqldeveloper #plsqldeveloper
Вопрос:
Люди,
Может кто-нибудь, пожалуйста, помочь мне объяснить приведенный ниже запрос?
SELECT SOME_ID ROOT_CAT,
CHILD_ID SOME_ID
FROM CHILD_TABLE
START WITH SOME_ID IN (SELECT ROOT_ID FROM ROOT_TABLE)
CONNECT BY NOCYCLE SOME_ID = PRIOR CHILD_ID;
Комментарии:
1. Это так называемый древовидный запрос, который извлекает иерархические данные. В чем именно ваша проблема с этим?
2. Посмотрите здесь START WITH и CONNECT BY в Oracle SQL
3. docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm
Ответ №1:
Это используется для извлечения иерархических данных, которые представляют собой что-то вроде родительского дочернего дочернего дочернего и т. Д.
start with
— это идентифицирует все узлы УРОВНЯ = 1 в дереве
connect by
— описывает, как перейти от родительских узлов выше к их дочерним элементам и дочерним элементам их дочерних элементов.
Общий синтаксис
select ...
start with initial-condition
connect by nocycle
recurse-condition
Конструкция connect by устанавливает рекурсию. Все записи, которые являются частью следующего более низкого иерархического уровня, находятся с помощью SOME_ID= CHILD_ID .
CHILD_ID — это значение, найденное на текущем иерархическом уровне
Ваш запрос может быть аналогичен:
SELECT SOME_ID ROOT_CAT,
CHILD_ID SOME_ID
FROM CHILD_TABLE
START WITH SOME_ID IN (SELECT ROOT_ID FROM ROOT_TABLE)
CONNECT BY NOCYCLE SOME_ID = PRIOR CHILD_ID;
SELECT PARENT_ID CURRENT_PARENT,
CHILD_ID PARENT_ID_CURRENT_CHILD
FROM LIST_OF_CHILDREN
START WITH PARENT_ID IN ( SELECT SOME_RANDOM_PARENT_ID FROM LIST_OF_PARENTS)
CONNECT BY NOCYCLE PARENT_ID = PRIOR CHILD_ID
Комментарии:
1. Большое спасибо, Нишанти
2. К сожалению, я не смогу проголосовать, поскольку моя репутация не позволяет мне этого делать.