Старый вариант (с проходом вниз по дереву):
select count(1)
from contract c
where exists
(
select 1
from department d
where d.agnlist_rn=c.executor_div_rn
connect by prior d.rn=d.srn -- srn - уровень вниз, RN первичный ключ
start with d.agnlist_rn=92 -- с какой точки строить дерево agnlist_rn уникально, можно и RN использовать
)
Время: > 3-4 сек.
Новый вариант (с проходом вверх по дереву):
select count(1)
from contract c
where exists
(
select 1
from department d
where d.agnlist_rn=92
connect by prior d.srn=d.rn -- собираем дерево вверх
start with d.agnlist_rn=c.executor_div_rn
)
Время: < 0.1 сек.
Предложил один программист, для оптимизации
Я голову ломаю и не пойму - идентичны они будут или нет... и если идентичны то при каких условиях...
Делаю выборки - вроде результат один... хочу чтоб посмотрели свежим взглядом...