2016-12-04 14 views
2

Я пытаюсь выполнить следующую инструкцию в базе данных оракула:оракул ошибка 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

У вас есть дважды '... от 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.player_id из 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 - проверка теперь .. Имя таблицы должно быть '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);