Oracle DB - ORA-00904:选择时出现“无效标识符”错误

Posted

技术标签:

【中文标题】Oracle DB - ORA-00904:选择时出现“无效标识符”错误【英文标题】:Oracle DB - ORA-00904: "invalid identifier" error on select 【发布时间】:2022-01-15 05:24:13 【问题描述】:

我是 Oracle DB 的新手,遇到了一个我不太理解的错误。

我有两个表,table1 和 table2,table1 中的 ID 主键字段是 table2 中的外键。

这是一个运行良好的查询:

select c.* from table1 c
    inner join table2 c2 on c.ID = c2.RID

问题是我正在尝试编写一个更复杂的查询,一旦我向查询中添加更多表,我就会收到此错误 ORA-00904: C"."ID": invalid identifier,当我运行以下命令时会收到此错误:

select c.* from table1 c, table3 a, table4 b
    inner join table2 c2 on c.ID = c2.RID

我查看了 this thread 寻求帮助,但它并没有真正帮助我的情况(除非我错过了什么,但我对此表示怀疑)

【问题讨论】:

今日提示:随处切换到现代、明确的JOIN 语法。更容易编写(没有错误),更容易阅读(和维护),并且在需要时更容易转换为外连接。 因为在逗号分隔的连接链之前评估显式连接链......即您的 ON 只能访问 table4 和 table2 列。 除了你错误的连接语法之外,如果没有看到所有相关表的实际 CREATE TABLE ddl,真的是不可能说的。 它告诉你table1 没有名为"ID" 的列。我倾向于相信它。不过,一个有效的测试用例会有很大帮助。 【参考方案1】:

只需将连接堆叠在一起,例如:

select c.* 
from table1 c 
    inner join table2 c2 on c.ID = c2.RID
inner join table3 a on [c.ID = a.RID] --you have not provided the relations for this 
inner join table4 b on [c.ID = b.RID] --you have not provided the relations for this 

如果您仍然从 c.ID 获得无效标识符,我会仔细检查 ID 是否实际上是正确的列名。

请提供表格定义以及它们应如何关联以获得更好的答案

【讨论】:

以上是关于Oracle DB - ORA-00904:选择时出现“无效标识符”错误的主要内容,如果未能解决你的问题,请参考以下文章

oracle ref() oracle-00904 无效的列名

ORACLE: ORA-00904: : 无效的标识符

为啥我会收到:[Oracle][ODBC][Ora]ORA-00904:标识符无效

Spring boot “oracle.jdbc.OracleDatabaseException: ORA-00904: invalid identifier” 创建表时出错

ORA-00904: 子查询中的无效标识符(在选择子句中)

ORA-00904 无效标识符 -- 动态 Oracle 函数