2016-09-07 6 views
0

У меня есть таблица (dim_factory_relation), которая хранит идентификаторы дочерних фабрик и родительский идентификатор фабрики для каждого дочернего завода в нижнем формате.SQL Query для выбора родительской иерархии для дочернего элемента

FK_CHILD_FACTORY_ID FK_PARENT_FACTORY_ID 
65      5 
66      5 
5      13 
10      13 
13      25 
13      40 
30      40 
40     100 
71      56 
72      56 
56     100 

Теперь, если я пройду нижнюю детскую фабрику, он должен предоставить список родителей до верхнего уровня. Например. Я прохожу 65 лет в детскую фабрику. Он должен дать мне

FK_PARENT_FACTORY_ID 
5 
13 
25 
40 
100 

Пожалуйста, помогите, как получить это, используя Oracle SQL. Спасибо за помощь.

+0

Вы должны показать нам, что вы пробовали, и как это не удалось. Не запрашивать бесплатный источник –

+0

http://stackoverflow.com/questions/tagged/hierarchical-data+oracle или http://stackoverflow.com/questions/tagged/recursive-query+oracle –

ответ

3

Использование connect by prior

select FK_PARENT_FACTORY_ID 
    from t 
start with FK_CHILD_FACTORY_ID = 65 
connect by prior FK_PARENT_FACTORY_ID=FK_CHILD_FACTORY_ID 

ВЫВОД

    FK_PARENT_FACTORY_ID 
--------------------------------------- 
             5 
            13 
            25 
            40 
            100 
+1

Удивительно .. Большое спасибо. он работает .. –

+1

Я бы, вероятно, включил LEVEL в SELECT - набор результатов не имеет порядка, и можно было бы предположить (даже если OP этого не осознает), что отношения между предками имеют отношение к любой проблеме, что это означает решать. – mathguy