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

Sql Oracle[错误]执行(31:5):ORA-00904:无效标识符,sql,oracle,join,select,Sql,Oracle,Join,Select,我编写了以下查询 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:无效标识符您必须为派生表别名,例

我编写了以下查询

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:无效标识符

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

选择FMP.FE6_里程桩_I, FMP.OPERATIONAL_REGION_C, FMP.运营区域, FMP.操作区C, FMP.操作区, FMP.运营分公司, FMP.经营分部 来自TBL FMP 其中FMP.FE6_里程桩I=0 FMP 在派生表中为TBL提供的FMP别名不会转义派生表的嵌套命名空间作用域。也就是说,您无法从外部看到该表名。在不给派生表任何名称的情况下,只能引用其投影列而无需限定


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

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

选择FMP.FE6_里程桩_I, FMP.OPERATIONAL_REGION_C, FMP.运营区域, FMP.操作区C, FMP.操作区, FMP.运营分公司, FMP.经营分部 来自TBL FMP 其中FMP.FE6_里程桩I=0 FMP 在派生表中为TBL提供的FMP别名不会转义派生表的嵌套命名空间作用域。也就是说,您无法从外部看到该表名。在不给派生表任何名称的情况下,只能引用其投影列而无需限定


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

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

但在这里,我建议简化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 

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

但在这里,我建议简化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 

为您的子查询提供一个别名,然后在联接中使用它。这显然是一个常见问题解答。在考虑发帖之前,请阅读本手册,谷歌搜索任何错误信息,或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。如果你发布一个问题,用一句话作为标题。反思你的研究。请参阅投票箭头鼠标悬停文本(&A),这是否回答了您的问题?为您的子查询提供一个别名,然后在联接中使用它。这显然是一个常见问题解答。在考虑发帖之前,请阅读本手册,谷歌搜索任何错误信息,或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。如果你发布一个问题,用一句话作为标题。反思你的研究。请参阅投票箭头鼠标悬停文本(&A),这是否回答了您的问题?