Выбрать первую запись в иерархическом запросе Oracle sql, удовлетворяющую условию

нужна помощь с запросом в бд Oracle. Допустим есть таблица objects у которой есть поля: id, parent и name.

OBJECTS (id, parent и name)

id - уникальный идентификатор объекта;
parent - родитель объекта;
name - имя объекта;

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

 select id, name
      from objects
    where name = 'My_name'
     start with id =1
    connect by parent = prior id ;

Но у этого запроса минус в том, что сначала построится все иерархия, а уже потом применится условие по имени, но нам же нужен первый попавшийся, зачем нам вся иерархия. Такой же запрос:

select id, name
          from objects
         start with id =1
        connect by parent = prior id and name = 'My_name';

Такой же запрос работает неверно, так как условие по connect by обрубается на первом же шаге. Вообщем-то мой вопрос заключается в следующем, возможно как-то выполнить эту задачу без использования PL/SQL, ну и чтобы эффективность такого запроса была выше, чем построить всю иерархию.


Ответы (1 шт):

Автор решения: Mike

Надо немного по другому сформулировать цель: выбрать в рекурсии все элементы до тех пор пока name НЕ равен "My_name". Это бы обрубило ветвь на предпоследнем элементе и не вывело бы нужную строку. Тогда переформулируем: продолжать рекурсию пока предыдущий элемент не равен "My_name". Или на языке oracle:

 select id, name
   from objects
  start with id =1
connect by parent = prior id and prior name != 'My_name';
→ Ссылка