2016-07-30 47 views
0

所以我在sql中创建了这个母板,其中没有任何外键。只是主键我无法正确加入我创建的外键

CREATE TABLE ALUMNI (
ALUMNIID INTEGER CONSTRAINT ALUMN_ID_PK PRIMARY KEY, 
ANAME VARCHAR(30) NOT NULL, 
AADDRESS VARCHAR2(30) NOT NULL, 
AEMAIL VARCHAR2(30) NOT NULL, 
AWORK# INTEGER NOT NULL, 
AHOME# INTEGER, 
ACITY VARCHAR(30) NOT NULL 
); 

再有就是在它继承/外键的ALUMNIID

CREATE TABLE QUALIFICATION 
(QUALIFICATIONID INTEGER CONSTRAINT QUALI_ID PRIMARY KEY, 
DEGREEEARNED VARCHAR2(30) NOT NULL, 
AREASPECIFIED VARCHAR2(30) NOT NULL, 
DISCIPAREA VARCHAR2(30) NOT NULL, 
DATEGRAD VARCHAR2(30) NOT NULL, 
SCHOONAME VARCHAR2(30) NOT NULL, 
QUALI_ALUM INTEGER, 
CONSTRAINT QUALI_ALUM_FK FOREIGN KEY (QUALI_ALUM) REFERENCES 
ALUMNI (ALUMNIID)); 

继承人在那里我得到了一些问题的首要这个宝贝表。我尝试了意见陈述

CREATE VIEW VIEWA AS SELECT ALUMNIID, ANAME, AEMAIL, AWORK#, AHOME#,DATEGRAD FROM ALUMNI,QUALIFICATION WHERE 
ALUMNI.ALUMNIID = QUALIFICATION.ALUMNIID AND 
DATEGRAD = '2015'; 

但产量说

Error starting at line : 1 in command - 
CREATE VIEW VIEWA AS SELECT ALUMNIID, ANAME, AEMAIL, AWORK#, AHOME#,DATEGRAD FROM ALUMNI,QUALIFICATION WHERE 
ALUMNI.ALUMNIID = QUALIFICATION.QUALI_ALUM_FK AND 
DATEGRAD = '2015' 
Error report - 
SQL Error: ORA-00904: "QUALIFICATION"."QUALI_ALUM_FK": invalid identifier 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 

是我创建或合并其他表的PK错了吗?那就是为什么我不能在视图中加入两张表格?

+0

'QUALI_ALUM'是对其具有FK约束的字段名称,您在查询中使用字段名称而不是约束名称。 –

回答

0

首先,您应该修复查询以使用正确的JOIN语法。问题是您正在使用外键引用的名称而不是列的名称。您似乎想要:

CREATE VIEW VIEWA AS 
    SELECT a.ALUMNIID, a.ANAME, a.AEMAIL, a.AWORK#, a.AHOME#, q.DATEGRAD 
    FROM ALUMNI a JOIN 
     QUALIFICATION q 
     ON a.ALUMNIID = q.QUALI_ALUM AND 
      q.DATEGRAD = '2015'; 

请注意,表别名使查询更易于编写和读取。我没有看到在SELECT中包含DATEGRAD的原因,因为您知道它是'2015'

此外,我会建议您在两个表中使列名相同作为一般规则,我喜欢让外键引用与它们引用的主键具有相同的列名称。这使参考透明(这不总是可能的,但通常是这样)。

+0

谢谢!现在,我知道我的错误:) –