Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Рекурсивный запрос  [new]
vladslav
Member

Откуда:
Сообщений: 326
Коллеги, помогите советом.
Есть иерархия. В каждой ветке встречаются узлы, соответствующие определенному условию.
Задача: двигаться вниз по иерархии. При встрече с ПЕРВЫМ элементом, попадающим под условие, вернуться по ветке вверх и начать двигаться по другой ветке.
То есть, при встрече нужного элемента, возвращаемся к началу ветвления и движемся по соседней ветке. Если ветка вновь ветвится, то исследуем каждую подветвь до встречи с нужным элементом. если мы нашли нужный элемент до ветвления, то дальше вниз не идем.
Интуитивно кажется, что подойдет конструкция WITH, но как выстроить запрос - не соображу.

Подскажите!
14 апр 16, 14:13    [19056568]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
vladslav,

Твои размышления про движения вверх-вниз несколько отличаются от того как работает декларативный язык запросов.
Если изобразишь пример данных и результата - есть вероятность получить конкретный совет, в противном случае совет - думай над выделенным словом.
14 апр 16, 14:22    [19056660]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
Elic
Member

Откуда:
Сообщений: 29976
Древовидная структура, узнать где обрыв
14 апр 16, 14:26    [19056689]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
vladslav
Подскажите!

Используй условие, как условие остановки Люк!
14 апр 16, 18:24    [19058217]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
хиерархуёмоё
Guest
vladslav
В каждой ветке встречаются узлы, соответствующие определенному условию.
каждость ознвчает, что условие всегда true.
не понял, кто-что спускает, но куда не скачи, там снова каждая ветка. напрашивается ответ:
select * from таблица;
14 апр 16, 18:34    [19058244]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
Set666
Member

Откуда:
Сообщений: 177
Можно поподробнее про условие, зависит ли оно от данных хранимых только в проверяемой строки или в условии используются данные родительских элементов? И вообще что ты в конечном итоге хочешь получить ?
Если первое то достаточно будет этого:
select *
from table1
where условие

Если нет то используй конструкцию connect by prior
15 апр 16, 08:09    [19059580]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
vladslav
Member

Откуда:
Сообщений: 326
Set666,

нет, параметры родителя значения не имеют. Движемся по ветке. нашли нужный элемент, остановились, вернулись вверх до ветвления, спустились по другой ветке. Тоже самое - нашли первый подходящий элемент, вернулись назад до ветвления.
15 апр 16, 11:43    [19060911]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
vladslav
Member

Откуда:
Сообщений: 326
На выходе должен быть список первых элементов, удовлетворяющих условию из разных веток
15 апр 16, 11:44    [19060924]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
Elic
Member

Откуда:
Сообщений: 29976
vladslav
На выходе должен быть список первых элементов, удовлетворяющих условию из разных веток
RTFM
15 апр 16, 11:48    [19060971]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
Casper_ora
Guest
vladslav,

¯\_(ツ)_/¯
15 апр 16, 11:49    [19060980]     Ответить | Цитировать Сообщить модератору
 Re: Рекурсивный запрос  [new]
Set666
Member

Откуда:
Сообщений: 177
vladslav
На выходе должен быть список первых элементов, удовлетворяющих условию из разных веток

Ну тогда изучай connect by prior, с помощью него можно получить уровень вложения элемента, так же ставишь услувие в where, а потом выбираешь те записи у которых этот уровень меньше.
15 апр 16, 11:59    [19061076]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить