使用外键访问不同数据库上的数据

时间:2017-11-09 13:01:53

标签: sql oracle

我有一个中央数据库Student,我的所有其他表Foriegn Key to,反过来我的Courses数据库中各种记录的外键。

CREATE TABLE student(
    FIRST_NAME  varchar(50),
    LAST_NAME varchar(50),
    OSIS number(10,0),
    OFCL varchar(5),
    GRADE number(4,0),
    COURSE_0 varchar(5),
    COURSE_1 varchar(5),
    COURSE_2 varchar(5),
    COURSE_3 varchar(5),
    COURSE_4 varchar(5),
    COURSE_5 varchar(5),
    COURSE_6 varchar(5),
    COURSE_7 varchar(5),
    COURSE_8 varchar(5),
    COURSE_9 varchar(5),
    COURSE_10 varchar(5),
    CONSTRAINT pk_student PRIMARY KEY (OSIS),
    CONSTRAINT course_0 FOREIGN KEY (COURSE_0) REFERENCES course(COURSE_ID),
    CONSTRAINT course_1 FOREIGN KEY (COURSE_1) REFERENCES course(COURSE_ID),
    CONSTRAINT course_2 FOREIGN KEY (COURSE_2) REFERENCES course(COURSE_ID),
    CONSTRAINT course_3 FOREIGN KEY (COURSE_3) REFERENCES course(COURSE_ID),
    CONSTRAINT course_4 FOREIGN KEY (COURSE_4) REFERENCES course(COURSE_ID),
    CONSTRAINT course_5 FOREIGN KEY (COURSE_5) REFERENCES course(COURSE_ID),
    CONSTRAINT course_6 FOREIGN KEY (COURSE_6) REFERENCES course(COURSE_ID),
    CONSTRAINT course_7 FOREIGN KEY (COURSE_7) REFERENCES course(COURSE_ID),
    CONSTRAINT course_8 FOREIGN KEY (COURSE_8) REFERENCES course(COURSE_ID),
    CONSTRAINT course_9 FOREIGN KEY (COURSE_9) REFERENCES course(COURSE_ID),
    CONSTRAINT course_10 FOREIGN KEY (COURSE_10) REFERENCES course(COURSE_ID)
)

CREATE TABLE course( 
    TITLE varchar(25), 
    COURSE_ID varchar(5), 
    PERID number(10,0), 
    OSIS number(10,0), 
    CONSTRAINT fk_teacher FOREIGN KEY (OSIS) REFERENCES teacher(OSIS), 
    CONSTRAINT pk_course PRIMARY KEY(COURSE_ID) 
)

我还有一个Absent数据库,其中包含Student数据库的外键。

CREATE TABLE absent( 
    OSIS number(10,0), 
    CONSTRAINT student_absent FOREIGN KEY (OSIS) REFERENCES student(OSIS) 
)

我正在寻找一种使用Student上的外键访问Absent上的数据的方法。例如,如果我在OSIS1234567890上有Student个号Absent,我希望在{{{{}}上访问与1234567890配对的数据1}}在Student上使用1234567890的外键。我发现有关调用外键的文档相对较少(仅设置它们),那么我应该采取哪些步骤来调用Absent的外键?

1 个答案:

答案 0 :(得分:1)

外键是约束而不是程序构造。它们阻止我们在absence中插入一条记录,该记录未引用student中的现有记录。

所以你需要做的就是加入表格:

select s.*
from student s
   join absence a
       on a.osis = s.osis
where a.osis = 124466 -- or whatever

顺便提一下,所有这些course列都非常难看:你应该规范化数据模型并在两个表之间引入一个交集表,比如说student_course