标识符无效,无法运行JOIN查询



尝试运行以下代码将esrb评级和平台加入GAME表,但失败:

select distinct ntdo_stage.title, ntdo_stage.meta_score, ntdo_stage.user_score, ntdo_stage.link, ntdo_stage.date2, ntdo_stage.platform, ntdo_stage.esrb_rating
from ntdo_stage
left join ntdo_platform 
on (ntdo_platform.platform_id =ntdo_game.platform_id)
left join ntdo_esrb_rating
on (ntdo_esrb_rating.esrb_rating_id =ntdo_game.esrb_rating_id) 
where title is not null

得到以下错误消息:

ORA-00904: "NTDO_GAME"."PLATFORM_ID": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 159 Column: 38

ESRB_RATING表的DDL:

CREATE TABLE ntdo_esrb_rating (
esrb_rating    VARCHAR2(10),
esrb_rating_id NUMBER NOT NULL
);
ALTER TABLE ntdo_esrb_rating ADD CONSTRAINT ntdo_esrb_rating_pk PRIMARY KEY ( esrb_rating_id );

平台表DDL:

CREATE TABLE ntdo_platform (
platform_id   NUMBER NOT NULL,
platform_name VARCHAR2(55)
);
ALTER TABLE ntdo_platform ADD CONSTRAINT ntdo_platform_pk PRIMARY KEY ( platform_id );
ALTER TABLE ntdo_game_developer
ADD CONSTRAINT ntdo_game_dev_fk FOREIGN KEY ( developer_id )
REFERENCES ntdo_developer ( developer_id );

游戏表DDL:

CREATE TABLE ntdo_game (
game_id              NUMBER NOT NULL,
game_name            VARCHAR2(55),
meta_score           VARCHAR2(10),
user_score           VARCHAR2(10),
link                 VARCHAR2(150),
platform_id          NUMBER NOT NULL,
esrb_rating_id       NUMBER,
release_date         DATE,
release_date_comment VARCHAR2(55)
);
ALTER TABLE ntdo_game ADD CONSTRAINT ntdo_game_pk PRIMARY KEY ( game_id );

STAGE TABLE的DDL:

CREATE TABLE "MASY_CW3956"."NTDO_STAGE" (
"META_SCORE" NUMBER(38,0), 
"TITLE" VARCHAR2(256 BYTE), 
"PLATFORM" VARCHAR2(26 BYTE), 
"DATE2" VARCHAR2(50 BYTE), 
"USER_SCORE" NUMBER(38,1), 
"LINK" VARCHAR2(256 BYTE), 
"ESRB_RATING" VARCHAR2(26 BYTE), 
"DEVELOPERS" VARCHAR2(128 BYTE), 
"GENRES" VARCHAR2(128 BYTE)
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
NOCOMPRESS LOGGING
STORAGE (INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"

我已经为platform_id、esrb_rating_id和game_id制作了序列。

联接子句(ntdo_platform.platform_id =ntdo_game.platform_id)引用了ntdo_game表,但在此查询中没有联接到该表。您需要将该表包含在from子句中。

如果您在ntdo_stage表中有一个game_id列,那么您的查询将如下所示:

select distinct   
ntdo_stage.title
,ntdo_stage.meta_score
,ntdo_stage.user_score
,ntdo_stage.link
,ntdo_stage.date2
,ntdo_stage.platform
,ntdo_stage.esrb_rating
from   
ntdo_stage
left join
ntdo_game on NTDO_STAGE.game_id = ntdo_game.game_id
left join
ntdo_platform on (ntdo_platform.platform_id = ntdo_game.platform_id)
left join
ntdo_esrb_rating on(ntdo_esrb_rating.esrb_rating_id = ntdo_game.esrb_rating_id)
where title is not null;

您收到一个错误,因为您的查询使用的表ntdo_stage似乎不存在(至少在您给我们的表中(。

您还会收到一个关于title列的错误,因为没有一个表具有标题列。

你好像把一些桌子弄混了。

最新更新