当前位置: 首页 > 知识库问答 >
问题:

Oracle[错误]执行(31:5):ORA-00904:无效标识符

红明德
2023-03-14

我写了以下查询

SELECT TPD.*, 
   FMP.*
   FROM TABLE TPD
LEFT JOIN 
(SELECT *
FROM TBL FMP
WHERE FMP.FE6_MILEPOST_SEQ_I = 0)
ON FMP.FE6_MILEPOST_I = TPD.CURR_STATION_MP_I 

内部的两个子查询分别工作,但当连接时,会抛出以下错误

[错误]执行(31:5): ORA-00904:"FMP"."FE6_MILEPOST_I":无效标识符

共有2个答案

堵彬彬
2023-03-14

子查询需要别名,因此您可以引用它在外部查询中返回的列。

但是在这里,我建议简化< code>FROM子句。无论如何,使用子查询看起来没什么用,所以您可以这样做:

SELECT ...
FROM TABLE TPD
LEFT JOIN TBL FMP
    ON  FMP.FE6_MILEPOST_SEQ_I = 0
    AND FMP.FE6_MILEPOST_I = TPD.CURR_STATION_MP_I 
甄佐
2023-03-14

您必须为您的派生表起别名,例如:

(SELECT FMP.FE6_MILEPOST_I,
   FMP.OPERATIONAL_REGION_C,
   FMP.OPERATIONAL_REGION_N,
   FMP.OPERATING_ZONE_C,
   FMP.OPERATING_ZONE_N,
   FMP.OPERATING_SUBDIVISION_C,
   FMP.OPERATING_SUBDIVISION_N
FROM TBL FMP
WHERE FMP.FE6_MILEPOST_SEQ_I = 0) FMP

您在派生表中为< code>TBL指定的< code>FMP别名不会“转义”派生表的嵌套命名空间范围。也就是说,您无法从外部“看到”该表名。如果不给派生表任何名称,那么只能引用它的投影列而没有限定。

请注意,Oracle是为数不多的一种数据库,它首先允许您跳过派生表的别名,以实现快速、脏查询。即便如此,我建议您始终为派生表别名,即使在Oracle中也是如此。

 类似资料:
  • 有人能帮我找出为什么这段代码返回一个SQLOracle ORA-00904:无效的索引符错误吗?查询在没有Country='阿根廷'的情况下有效,但我需要按此值向下过滤。有人能给我指出正确的方向吗?

  • Oracle 11g Express Edition..创建表时出错 ORA-00904:无效标识符

  • 我已经在虚拟XP中安装了Oracle 10g,并使用 并且成功地创建了表。但是当我试图通过简单的查询获取值时,如 我得到的错误就像 ORA-00904:"bbb":无效标识符 我不能理解我在这里做错了什么。

  • 创建此表后,我正在尝试添加外键 我想使用Alter table创建的外键是Sailnumber: ALTER表成员添加外键(sailnumber)引用船(sailnumber) sailnumber是table boat的主键,如下所示 然而,我得到了这个错误SQL错误: ORA-00904:"SAILNUMBER":无效的标识符,我不知道为什么我得到有人能告诉我哪里出错了吗?

  • 我正在尝试使用此查询创建一个表(customer)到数据库, 我得到以下回复: 错误报告-SQL错误:ORA-00904::标识符00904无效。00000-%s:无效标识符

  • 我正在进行SQL查询,但遇到了一个问题。 这就是查询。 这就是结果。 我不知道为什么“T1”在子查询中无效。