我正在尝试使用 connect by 递归获取一些数据,对于每一行,我需要知道在不同的树中是否包含特定项目。
所以我有这个[精简]查询:
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": invalid identifier on m.id in start with 在我的嵌套查询中,但此错误。如果我将查询替换为:
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 开始,或者重构它来工作?我还尝试使用一些嵌套选择并按级别 desc 执行 where on rownumber = 1 order,但是在尝试引用 m.id 时出现完全相同的错误。
谢谢!