SQL Query将数据从一个表复制到多个其他表

时间:2013-08-13 21:46:14

标签: sql database

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

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

我想要做的是获取所有数据,然后使用该信息填写其他几个表,例如:

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

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

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

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

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

表格列是这样的:

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

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

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

1 个答案:

答案 0 :(得分: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;

就是这样。