2016-12-04 65 views
2

我试图运行在Oracle数据库中的以下语句:的Oracle SQL无效的标识符错误

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) 
); 

任何帮助将不胜感激。

+0

您的表名为:** ** ** ** _ Team_Roster或“** nfl ** _ team_roster”? – Gerrat

+0

你有两次......来自nfl_player ......但你的表名是** NBA_Team_Roster **。 – FDavidov

回答

0

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名称,而不是完整的表名来引用它使查询更具可读性列。

+0

我想在下面的语句中沿着相同的行做一些事情,但是我只是在这次涉及到最后的'和'子句时才得到相同的无效标识符错误。校验 - 从nfl_player,nfl_team_roster,nfl_game \t \t其中nfl_player.player_id = nfl_team_roster.player_id \t \t和nfl_team_roster.team_id = nfl_game.team_id \t \t和nfl_game.start_time = 700' – Sal

+0

@Sal '选择nfl_player.player_id 现在..表名应该是'NBA_Team_Roster'而不是'nfl_team_roster' –

+0

我犯了一个错误。它应该是架构中的NFL而不是NBA。对于那个很抱歉。这一切都解决了原始问题。你有没有看到我刚刚发布的评论? – Sal

0

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

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); 
相关问题