我有一个"无效的标识符"在Oracle中因为" B.username" (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)
答案 0 :(得分:2)
让我们用您的查询的简化版本来尝试:
-- 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表中没有“用户名”列,导致错误。一个横向内联视图(例子见here)可以解决这个问题......
-- query
select
*
from B, lateral (
select B.username
from NEWTESTAPPLICANT qNA
) A ;
-- result
ID USERNAME USERNAME
1 name1 name1
这适用于Oracle 12c。
答案 1 :(得分:0)
问题是,您的虚拟表A和用户B都具有相同的列名“username”。在主选择中指定别名,例如“选择A. *,B。*来自(...”。
答案 2 :(得分:0)
是ORA-00903吗?
用户是保留字你确定你创建了这个表吗?表名不能是保留字。