Oracle 标识符无效(具有内部联接)



由于"B.username",我在Oracle中有一个"无效标识符"(用户名列确实存在于USER表中(。当我删除它时,它工作正常。如何解决此问题?我来自MySQL背景。

SELECT * FROM (SELECT qNA.assignment, qNA.regDate, B.username, (
SELECT DISTINCT NVL(idx, 0) 
FROM EK_USERGRADE
WHERE year = (SELECT DISTINCT userGradeNo FROM EK_USER WHERE ID = qNA.userIdx)
) AS userGradeIdx
FROM EK_NEWTESTAPPLICANT qNA
WHERE IDX = :idx ) A 
INNER JOIN EK_USER  B ON (A.userIdx = B.ID)

让我们用简化版本的查询来尝试一下:

-- test tables
create table NEWTESTAPPLICANT as select 1 useridx from dual  ;
create table B as select 1 id, 'name1' username from dual ;
-- query
select *
from (
select B.username
from NEWTESTAPPLICANT qNA
) A join B on A.useridx = B.id ;
-- ORA-00904: "B"."USERNAME": invalid identifier

NEWTESTAPPLICANT 表中没有"用户名"列,这会导致错误。 横向内联视图(示例见此处(可能会解决问题...

-- query
select 
*
from B, lateral (
select B.username
from NEWTESTAPPLICANT qNA
) A ;
-- result
ID  USERNAME  USERNAME  
1   name1     name1  

这适用于 Oracle 12c。

问题是,您的虚拟表 A 和用户 B 都具有相同的列名"用户名"。在主选择中指定别名,例如"选择 A.* , B.* from(..."。

是 ORA-00903 吗?

用户是保留字 您确定您创建了此表吗?表名不能是保留字。

最新更新