Соединение по запросу для всех детей

Есть ли способ получить connect prior... start with оператор в Oracle, чтобы начать с первого "потомка" в таблице, а затем выполнить запрос для всех оставшихся потомков? Я знаю, как использовать оператор для 1 ребенка и получить его происхождение, но мне нужно, чтобы код выполнялся для множества разных детей в таблице.

Предположим, у меня есть этот код, который возвращает компонент и цвет компонента из таблицы компонентов и родительского компонента, который классифицируется как "образец" и его цвет, где родительский идентификатор компонента - это идентификатор родительского элемента для компонента.

Это моя схема:

Components table:
Component        Component_ID      Component_Parent_ID      Component_Label

Component_Color Table:
Component      Component_Color

Примечание: это пример кода, а не тот, который я на самом деле использую, поэтому, если вы делаете глупые ошибки, мне очень жаль.

SELECT Component,
  FROM Components
 INNER JOIN Component_Color ON (Components.Component =  Component_Color.Component)
 WHERE Component_Label = 'Sample'
connect by prior  Component_Header.Component_Parent_ID = Component_Header.Component_ID
  start with Component.Component_ID = '2000'; 

Компонент таблицы имеет много разных компонентов, и я хочу, чтобы запрос возвращал не только компонент с идентификатором 2000 и его "образцом" родителя, но и для всех дочерних элементов в таблице "Компоненты".

Я вижу, как это можно сделать с помощью цикла, но не могу найти, какой тип цикла я могу использовать для Oracle. Извините, только начинается.

1 ответ

Решение

Избегать использования WHERE а также ORDER BY предложения в иерархических запросах, потому что они выполняются после иерархической обработки. Здесь я думаю, что вы должны использовать START WITH component_label = 'Sample',

 SELECT level, components.component_id, components.component_label, component_color.component_color
   FROM compenents JOIN component_color ON components.component = component_color.component
  START WITH components.component_label = 'Sample'
CONNECT BY PRIOR components.component_id = components.component_parent_id
Другие вопросы по тегам