Я надеюсь, что смогу объяснить проблему, которая озадачивает меня.
У меня есть следующий набор иерархических данных (это всего лишь подмножество 34K записей)
PARENT_ID CHILD_ID EXAM
TUDA12802 TUDA12982 N
TUDA12982 TUDA12984 J
TUDA12984 TUDA999 J
TUDA12982 TUDA12983 N
TUDA12983 TUDA15322 J
TUDA12983 TUDA15323 J
Это представление дерева
TUDA12982 N
- TUDA12984 J
-- TUDA999 J
- TUDA12983 N
-- TUDA15322 J
-- TUDA15323 J
Мне нужен список всех записей с экзаменом = N и базовыми записями экзамена = 'J', которые можно вкладывать.
select *
from test1
connect by prior child_id = parent_id
start with child_id = 'TUDA12982'
order siblings by child_id;
дает мне
PARENT_ID CHILD_ID EXAM
TUDA12802 TUDA12982 N
TUDA12982 TUDA12984 J
TUDA12984 TUDA999 J
TUDA12982 TUDA12983 N
TUDA12983 TUDA15323 J
TUDA12983 TUDA15322 J
Но мне нужно
TUDA12802 TUDA12982 N
TUDA12982 TUDA12984 J
TUDA12984 TUDA999 J
Обход должен быть остановлен, когда я сталкиваюсь с записью EXAM = 'N'.
Мне нужно что-то вроде предложения 'stop with'.
select *
from test1
connect by prior child_id = parent_id
start with child_id = 'TUDA12982'
stop with exam = 'N'
order siblings by child_id;
Как это можно сделать?