2016-12-04 5 views
2

Ich versuche, die folgende Anweisung in der Oracle-Datenbank auszuführen:Oracle SQL ungültige Kennung Fehler

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

Aus irgendeinem Grund, wenn ich laufe es, erhalte ich die folgende Meldung:

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

I habe es überprüft und ich habe meine Syntax richtig (oder zumindest glaube ich). Die Spalte existiert. Ich habe mein Schema für die folgende Tabelle hinzugefügt. Was würde mir diesen Fehler geben?

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

Jede Hilfe würde sehr geschätzt werden.

+0

Ist Ihre Tabelle benannt: ** NBA ** _ Team_Roster oder "** nfl ** _ team_roster"? – Gerrat

+0

Sie haben zweimal "... von nfl_player ..." aber der Name Ihrer Tabelle ist ** 'NBA_Team_Roster' **. – FDavidov

Antwort

0

nfl_team_roster Tabelle wird in Ihrer Abfrage nicht verwendet. Ich glaube, Sie die Tabellennamen in Unterabfrage

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

Verwenden Alias Namen statt Volltabellennamen fehl am Platz Spalte beziehen sie die Abfrage besser lesbar machen.

+0

Ich versuche, etwas in der gleichen Weise in der folgenden Anweisung zu tun, aber ich bekomme den gleichen ungültigen Bezeichner Fehler nur dieses Mal, was die letzte 'und' Klausel betrifft. 'wählen nfl_player.player_id aus nfl_player, nfl_team_roster, nfl_game \t \t wo nfl_player.player_id = nfl_team_roster.player_id \t \t und nfl_team_roster.team_id = nfl_game.team_id \t \t und nfl_game.start_time = 700' – Sal

+0

@Sal - Check jetzt .. Tabellenname sollte 'NBA_Team_Roster' nicht' nfl_team_roster' sein –

+0

Ich habe einen Fehler gemacht. Es sollte NFL nicht NBA im Schema gewesen sein. Das tut mir leid. Es ist alles in Bezug auf das ursprüngliche Problem gelöst. Hast du den Kommentar gesehen, den ich gerade oben gepostet habe? – Sal

0

Es ist ein Fehler in der Unterabfrage, die Sie geschrieben haben, Sie haben den Tabellennamen in der Unterabfrage verlegt und den Aliasnamen in der Join-Bedingung verwendet.

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