ORA-00904 加入时

Posted

技术标签:

【中文标题】ORA-00904 加入时【英文标题】:ORA-00904 on join 【发布时间】:2015-12-14 15:52:18 【问题描述】:

我正在尝试创建以下视图:

CREATE OR REPLACE VIEW AlbumDistribution AS
  SELECT Album.Album_ID,
         Album.title,
         HasTrack.tracked,
         FinishedTrack.released_title,
         SUBSTR(Album.Album_ID, -1) is_distributed_as
    FROM Album A
    JOIN HasTrack HT 
      ON HT.Album_ID = A.Album_ID 
    JOIN FinishedTrack FT
      ON HasTrack.OriginatesFrom = FT.OriginatesFrom
     AND HasTrack.tracked = FT.version;

但我收到 ORA-00904 错误:

 ERROR at line 6:
 ORA-00904: "HASTRACK"."TRACKED": invalid identifier

我觉得这很令人困惑,因为我之前引用了 HasTrack.tracked 并且没有错误。如果我更改语句的顺序,将 HasTrack.OriginatesFrom = FT.OriginatesFrom 放在最后,那么我会得到相同的错误,但 HasTrack.OriginatesFrom 是。

【问题讨论】:

使用您在HasTrack 上定义的HT 别名,而不是直接使用HasTrackHT.tracked 如果您为表指定了别名,那么重点是使用该别名而不是前缀上的表名 【参考方案1】:

您为此表和其他表定义别名。您需要在整个查询中使用别名:

CREATE OR REPLACE VIEW AlbumDistribution AS
    SELECT A.Album_ID, A.title, HT.tracked,
           FT.released_title, SUBSTR(A.Album_ID, -1) is_distributed_as
    FROM Album A JOIN
         HasTrack HT
         ON HT.Album_ID = A.Album_ID JOIN
         FinishedTrack FT
         ON HT.OriginatesFrom = FT.OriginatesFrom AND
            HT.tracked = FT.version;

【讨论】:

以上是关于ORA-00904 加入时的主要内容,如果未能解决你的问题,请参考以下文章

在数据透视期间指定列时标识符无效 - ORA-00904

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

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

ORA-00904: 插入表时标识符无效

ORA-00904: 相关子查询上的列名无效

ORA-00904 使用 CASE 语句更新表时标识符无效