有一个带有分层数据的表(OKATO代码)并且有这样一个查询:
select ...,
e.idOKATO,
...
from MyEntity e
现在出现了一个要求 - 不显示分层实体的 id,而是显示其某些祖先(在树中)的 id。我写了这个递归查询:
select okato.id
from ( select o.id
from MyOkato o
connect by (prior o.idParent = o.id and length(o.sCode) >= 5)
start with o.id = :idOKATO
order by rownum desc) okato
where rownum = 1
它可以正常工作 - 当替换而不是:idOKATO
后代的 id 时,它会显示我需要的祖先的 id。
但是,现在,当将此查询作为第一个查询的子查询时:
select ...,
(select okato.id
from ( select o.id
from MyOkato o
connect by (prior o.idParent = o.id and length(o.sCode) >= 5)
start with o.id = e.idOKATO
order by rownum desc) okato
where rownum = 1) as idOKATO,
...
from MyEntity e
发生错误:
ORA-00904: "E"."IDOKATO": 标识符无效
怎么修?
设法摆脱了这样的一层嵌套:
该请求奏效了。同时摆脱了不必要的排序。