2016-12-04 12 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 

をIダブルチェックして、私は私の構文が正しい(または少なくとも私はそう信じている)。列が存在します。私はその表のスキーマを以下に含めました。何が私にこのエラーを与えるだろうか?

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

テーブルの名前は** NBA ** _ Team_Roster、または "** nfl ** _ team_roster"ですか? – Gerrat

+0

あなたは '... from nfl_player ... 'を2回持っていますが、あなたのテーブルの名前は**' 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 を選択テーブル名は 'nfl_team_roster'ではなく' NBA_Team_Roster'でなければなりません –

+0

私は間違いました。 NFLはスキーマ内のNFLではありませんでした。申し訳ありません。元の問題に関してはすべて解決されています。上記のコメントを見ましたか? – 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); 
関連する問題