2016-12-04 130 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); 
相關問題