2

我正在寻找一张包含信息的表格,并将该信息复制到其他多个表格中。

例如,我将使用一所学校。学校有一张桌子,上面有所有学生的花名册、他们的学生证、他们开始上学的时间、学年结束的时间、每个班级的成绩、他们的地址、电话号码等。所有这些都在一个名为 School 的表中.AllStudentInfo。

我想要做的是获取所有这些数据,然后用这些信息填充其他一些表格,例如:

  • School.Students - 这将填充来自原始 School.AllStudentInfo 的所有非重复学生 ID,以及特定信息(家庭住址、年龄、年级等)。

  • School.Classes - 我想用 School.AllStudentInfo 表中列出的所有班级 ID 填充这个(忽略重复项)。

  • Classes.Students - 我想用一个与 School.Classes (School.Classes.Id) 的 PK 有关系的 ClassId (Classes.Students.ClassId) 填充这个“桥/链接表”。它还将与与 Schools.Students.Id 列相关的 StudentId (Classes.Students.StudentId) 有关系。

但是,我不知道如何一次更新多个表和多个列,并且还没有发现这是否真的可以做到。

是吗?如果是这样,怎么办?

因此,表列是:

School.Students
---------------
StudentId (int)

School.Classes
---------------
ClassId (int)

Classes.Students
---------------
ID (int)
Student (int)
Class (int)
4

1 回答 1

2

您必须编写多个语句,您不能在一个语句中处理多个表。好消息是,这仍然没什么大不了的。

首先填写studentsclasses表格。就像是

INSERT INTO students
SELECT DISTINCT student_name, date_of_birth, whatever
FROM your_huge_denormalized_table;

classes桌子的故事相同。使用 auto_increment 列(作为主键)来获取您的 ID 列。

在旁注中,不要使用名称中带有点的表名。通常是这样的databasename.tablename。你明白了……

现在您已经填写了两个表,请填写解决 m:n 关系的表。哦,这里你不需要 ID 列,只需创建主键(student, class)

INSERT INTO classes_students
SELECT DISTINCT s.ID, c.ID
FROM your_huge_denormalized_table d
INNER JOIN students s ON d.StudentName = s.StudentName AND d.dob = s.dob /*add as much columns as needed to really identify each student*/
INNER JOIN classes c ON d.class_name = c.class_name;

就是这样。

于 2013-08-13T23:53:14.797 回答