Я пытаюсь рекурсивно получить некоторые данные, используя соединение, которое для каждой строки мне нужно знать, содержит ли в другом дереве определенный элемент.
Итак, у меня есть этот [урезанный] запрос:
select m.id, m.name,
(select (
with recursiveMetaClass as (
select mb.name
from meta mb
start with mb.id = m.id
connect by prior mb.metaclass = mb.id and mb.metaclass <> mb.id
) select name from recursiveMetaClass where name in ('config_group', 'config_item')
) from dual) as basetype
from meta m
inner join meta_rel mr on mr.rel2 = m.id
start with m.name = 'store_sys'
connect by prior m.id = mr.rel1
order siblings by item_order;
Эта ошибка возникает из-за ORA-00904 «M». «ID»: неверный идентификатор в m.id в начале моего вложенного запроса. Если я заменю запрос на:
select m.id, m.name,
(select (
with recursiveMetaClass as (
select mb.name
from meta mb
start with mb.id = 1004
connect by prior mb.metaclass = mb.id and mb.metaclass <> mb.id
) select name from recursiveMetaClass where name in ('config_group', 'config_item')
) from dual) as basetype
from meta m
inner join meta_rel mr on mr.rel2 = m.id
start with m.name = 'store_sys'
connect by prior m.id = mr.rel1
order siblings by item_order;
Это работает (просто дает неправильные результаты).
Как я могу получить m.id для начала или реорганизовать его, чтобы он работал? Я также пытался использовать некоторые вложенные выборки и выполнять порядок where on rownumber = 1 по описанию уровня, однако я получаю ту же самую ошибку при попытке сослаться на m.id.
Благодарю вас!
start with mb.id = meta.id
- person Ben Lee   schedule 26.03.2012