ORA-00904: 无效标识符 00904. 00000 - "%s: 无效标识符"

Posted

技术标签:

【中文标题】ORA-00904: 无效标识符 00904. 00000 - "%s: 无效标识符"【英文标题】:ORA-00904: invalid identifier 00904. 00000 - "%s: invalid identifier" 【发布时间】:2014-09-18 06:15:44 【问题描述】:

在 sqldeveloper 中运行查询时,我收到 "%s: invalid identifier" 错误。基本上,我想连接表 1 中的两列并将其与表 2 中的一列进行比较。两个表来自两个不同的数据库。出于某种原因,它不喜欢 t1_Name 别名。

select t1.First_name ||' '|| t1.Last_Name as t1_Name, t2.*
from table1 t1, table2 t2
where t1.t1_Name = t2.Account_name;

如果我能解决这个问题,我们将不胜感激。

【问题讨论】:

【参考方案1】:

您不能在WHERE 子句中使用查询的SELECT 列表中定义的别名。从逻辑上讲,WHERE 子句首先被处理,所以别名还不存在。

你要么需要复制计算

select t1.First_name ||' '|| t1.Last_Name as t1_Name, t2.*
  from table1 t1, table2 t2
 where t1.First_name ||' '|| t1.Last_Name = t2.Account_name;

或者您需要在内联视图中定义别名

select t1.t1_name, t2.*
  from (select t1.First_name ||' '|| t1.Last_Name as t1_Name
          from table1 t1) t1
       join table2 t2
         on( t1.t1_name = t2.account_name )

【讨论】:

【参考方案2】:

如果您的两个表位于不同的数据库中,则必须使用数据库链接。假设 table1 在数据库 db1 中,而 table2 在数据库 db2 中。您的查询(假设您在 db1 上运行查询)应如下所示:

SELECT t1.First_name ||' '|| t1.Last_Name as t1_Name, t2.* 
  FROM table1 t1, table2@db2 t2 WHERE t1.t1_Name = t2.Account_name;

您可以在此处找到更多信息: http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_concepts002.htm

【讨论】:

【参考方案3】:

您可以使用子选择:

select * 
  from (select t1.First_name ||' '|| t1.Last_Name t1_Name, t2.*
         from table1 t1, table2 t2)
 where t1_Name = Account_name;

查看this Fiddle。

【讨论】:

以上是关于ORA-00904: 无效标识符 00904. 00000 - "%s: 无效标识符"的主要内容,如果未能解决你的问题,请参考以下文章

ORA-00904: 无效标识符 00904. 00000 - "%s: 无效标识符"

Oracle 11g ORA-00904 中的抽象数据类型:标识符无效

记一例 ORA-00904:标识符无效

ORA-00904 无效标识符错误

SQL 错误 ORA-00904:标识符无效

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