如何使用用户插入的数据创建从三个表中检索数据的过程

时间:2018-04-21 06:34:50

标签: sql-server sql-server-2008

我有三个表DEPARTMENTSSEMESTERSUBJECTS

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

2 个答案:

答案 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;