我有三个表DEPARTMENTS
,SEMESTER
和SUBJECTS
CREATE TABLE DEPARTMENTS
(
D_ID INT PRIMARY KEY identity(1, 1),
department_name VARCHAR(50) NOT NULL
);
CREATE TABLE SEMESTER
(
D_ID INT FOREIGN KEY REFERENCES departments(D_ID),
sem_id INT PRIMARY KEY identity(1, 1),
semester INT CHECK
(semester BETWEEN 1 AND 8) NOT NULL
);
CREATE TABLE SUBJECTS
(
D_ID INT FOREIGN KEY REFERENCES departments(D_ID),
sem_id INT FOREIGN KEY REFERENCES semester(sem_id),
sub_id INT PRIMARY KEY identity(1, 1),
sub_name VARCHAR(50),
syllabus VARBINARY(MAX),
exam_format VARBINARY(MAX)
);
如果用户在department_name
表格中插入DEPARTMENTS
,在semester
表格中插入semester
,那么如何从sub_name
subject
答案 0 :(得分:2)
首先,你的设计是错误的。你不需要有一个从主题到部门的参考,因为部门可以通过学期访问,主题中的D_Id是多余的,恕我直言。
其次,您检索主题的标准是什么?
Select Sub_Name
from Subjects as sbj
inner join Departments as dpt on sbj.D_Id = dpt.D_Id
inner join Semester as smt on sbj.sem_id = smt.sem_id
where (YOUR CRITERIA)
这基本上是表格之间的一般相关性, 所以你可以指定条件和要检索的字段列表。
然而,最好先纠正您的设计,然后再访问部门 通过学期:
inner join Departments as dpt on smt.D_Id = dpt.D_Id
因此,您将在学期而不是科目中使用依赖性!
P.S。
如果学科中的部门与学期中的部门不同 然后你的布局很好,但是如果它们是相同的话 你可以摆脱后者
答案 1 :(得分:0)
您需要在此使用join
select sub.sub_name,dep.department_name,sem.semester
from subjects sub
join departments dep on dep.d_id = sub.d_id
join semester sem on sem.sem_id = sub.sem_id;