为什么下面的查询在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
答案 0 :(得分:4)
如果按照基础知识进行操作, CORRELATED Subquery
可以访问相关表格。但是当有 INNER subquery
时, INNER Query
将首先尝试执行...因此,条件中的另一个表格无法被占用,因为它们在那个时间点不可用。
理解这一点的捷径是......正如其他答案所述......
SELECT A.* FROM TABLE A
WHERE EXISTS
(SELECT 'X' FROM TABLE B WHERE B.ID = A.ID)
现在,相关子查询可以访问A.
select * from ENTITY_OWNERSHIP EO
where
EXISTS
(
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
)
答案 1 :(得分:1)
我认为您可以使用exists
来代替:
select *
from ENTITY_OWNERSHIP EO
where exists (
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
);