Найти клиентов на неправильном уровне (иерархический запрос) - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь выяснить, как найти клиентов, которые ошибочно находятся на неправильном уровне. Например, так называемый «основной клиент» находится на уровне 3, у него не может быть «суб-клиентов» на уровне 3 или выше, но на уровне 2 и 1 да. Как создать такой иерархический запрос, который бы выявлял подобные ошибки? Некоторый образец, был бы чрезвычайно хорош и добро пожаловать.

Спасибо

1 Ответ

0 голосов
/ 08 октября 2019

Посмотрите этот пример:

начиная с первого уровня открытой иерархии, определите уровень и лист или родительский элемент. Если ваш уровень клиента = 3 и родитель, он найден

    with tbl as (
select '12' id, null parent_id, 'main customer' status from dual
union all
select '13' id, null parent_id, 'main customer' status from dual
union all
select '131' id, 13 parent_id, 'main customer' status from dual
union all
select '121' id, 12 parent_id, 'main customer' status from dual
union all
select '1211' id, 121 parent_id, 'main customer' status from dual
union all
select '1212' id, 121 parent_id, 'main customer' status from dual
union all
select '12111' id, 1211 parent_id, 'main customer' status from dual
union all
select '12121' id, 1212 parent_id, 'main customer' status from dual)
select * from  
(select tbl.*, level lvl, connect_by_isleaf leaf 
from tbl
start with tbl.parent_id is null 
connect by prior id = parent_id) b 
where b.lvl = 3
AND b.status = 'main customer'
AND b.leaf = 0

вывод:

1211    121 main customer   3   0
1212    121 main customer   3   0
...