【问题标题】:oracle sql invalid identifier errororacle sql无效标识符错误
【发布时间】:2017-04-18 16:12:04
【问题描述】:

我正在尝试在 oracle 数据库中运行以下语句:

select nfl_player.first_name, nfl_player.last_name
from nfl_player
where player_id IN 
    (select nfl_player.player_id as pid
        from nfl_player
        where pid=nfl_team_roster.player_id
        and nfl_team_roster.team_id= 4
    );

由于某种原因,当我运行它时,我收到以下消息:

and nfl_team_roster.team_id= 4
    *
ERROR at line 7:
ORA-00904: "NFL_TEAM_ROSTER"."TEAM_ID": invalid identifier

我已经仔细检查过,我的语法是正确的(或者至少我相信如此)。该列存在。我在下表中包含了我的架构。什么会给我这个错误?

CREATE TABLE NBA_Team_Roster(
roster_ID number primary key,
team_id number,
player_id number unique,
foreign key (team_id) references NBA_Team(team_id),
foreign key (player_id) references NBA_Player(player_id)
);

任何帮助将不胜感激。

【问题讨论】:

  • 您的桌子是否命名为:NBA_Team_Roster,还是“nfl_team_roster”?
  • 你有两次...from nfl_player...,但你的表名是NBA_Team_Roster

标签: sql oracle sqlplus ddl dml


【解决方案1】:

nfl_team_roster 表未在您的查询中使用。我认为您在子查询中放错了表名

SELECT first_name, 
       last_name 
FROM   nfl_player nf 
WHERE  player_id IN (SELECT ntr.player_id AS pid 
                     FROM   NBA_Team_Roster ntr --Here 
                     WHERE  nf.pid = ntr.player_id 
                            AND ntr.team_id = 4); 

使用Alias 名称而不是完整的表名称来引用列,这使查询更具可读性。

【讨论】:

  • 我正在尝试按照以下语句中的相同方式做一些事情,但我得到了相同的无效标识符错误,只是这次它与最后一个 and 子句有关。 select nfl_player.player_id from nfl_player, nfl_team_roster,nfl_game where nfl_player.player_id=nfl_team_roster.player_id and nfl_team_roster.team_id= nfl_game.team_id and nfl_game.start_time=700
  • @Sal - 现在检查.. 表名应该是 NBA_Team_Roster 而不是 nfl_team_roster
  • 我犯了一个错误。架构中应该是 NFL 而不是 NBA。对于那个很抱歉。原来的问题都解决了。你看到我刚刚在上面发布的评论了吗?
  • @Sal - 您遇到的错误是什么。发布有问题的错误消息和查询
【解决方案2】:

您编写的子查询有错误,您在子查询中放错了表名并在连接条件中使用了别名。

 select np.first_name, np.last_name
from nfl_player np
where np.player_id IN 
    (select r.player_id as pid
        from NBA_Team_Roster r
        where r.team_id= 4);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-09
    • 1970-01-01
    相关资源
    最近更新 更多