Пожалуйста, объясните мне прикрепленный запрос

#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. К сожалению, я не смогу проголосовать, поскольку моя репутация не позволяет мне этого делать.