尝试运行以下代码将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
列的错误,因为没有一个表具有标题列。
你好像把一些桌子弄混了。