【发布时间】:2014-03-02 02:06:43
【问题描述】:
为什么下面的查询在 oracle 中不起作用?
select * from ENTITY_OWNERSHIP EO
where
(select count (*)
from (
select USER_ID
from ENTITY_OWNERSHIP
where ENTITY_OWNERSHIP.ENTITY_ID = EO.ENTITY_ID
)
) > 0
它产生“ORA-00904:“EO”。“ENTITY_ID”:无效标识符”。但是,当我将 EO.ENTITY_ID 替换为精确值时,例如 10181,它就可以工作了。
更新: 完整的查询如下所示:
select * from ENTITY_OWNERSHIP EO
where
(select count (*)
from (
select USER_ID
from ENTITY_OWNERSHIP
where ENTITY_OWNERSHIP.ENTITY_ID = EO.ENTITY_ID
intersect
select distinct group_id
from USERS.GROUPS
start with GROUP_ID in (select GROUP_ID from USERS.LK_GROUPS where USER_ID=10001)
connect by prior PARENTGROUP_ID=GROUP_ID
)
) > 0
【问题讨论】:
-
过滤条件不做任何事情。您正在计算
entity_ownership中存在的行数——但您正在从同一个表中进行选择。对于原始表中的每一行,count(*)必须至少为 1。 -
我举了一个简化的例子,这是我的错。请查看更新版本。