CTE, рекурсивный поиск в 2 разных таблицах - PullRequest
0 голосов
/ 09 августа 2011

у меня есть 2 запроса, собирать данные из разных таблиц, оба рекурсивные, но тесно связанные.

Оба хорошо работают:

Первые тянет дочерние компании:

with
relations as
(
select orgid as children,org_immediate_parent_orgid as orgid,'Sub' as relation
from oa.organizations 
)
select distinct relation, level, orgid, children
from relations
where children is not null
start with orgid in (identifier)
connect by
nocycle prior children = orgid
order by 2,3,4

Вторые филиалы:

with
relations as
(
select affiliated_orgid as children, orgid as orgid,'Aff' as relation
from oa.org_affiliations    
)
select distinct relation, level, orgid, children
from relations
where children is not null
start with orgid in (identifier)
connect by
nocycle prior children = orgid
order by 2,3,4

Рекурсия идет хорошо в обоих случаях, как я и ожидал. Да, в запросах обмениваются дети и orgid, я бы сказал, что дочерние компании - это «обратная зависимость» аффилированности (по крайней мере, в концепции), но результаты, как и ожидалось,

Я хочу запустить все вместе. Теперь я хочу, чтобы результаты первого цикла (для sub и aff) входили в следующий цикл (для subs и aff), пока дочерние элементы не будут нулевыми. Поэтому, если я получаю по одному результату от каждого, я хочу использовать оба идентификатора в качестве входных данных для каждого запроса.

Я знаю, что внутри "С помощью" я не могу сделать следующее.

select orgid as children,org_immediate_parent_orgid as orgid,'Sub' as relation
from oa.organizations

UNION ALL

select affiliated_orgid as children, orgid as orgid,'Aff' as relation
from oa.org_affiliations    

Какие у меня альтернативы, решения?

...