我正在寻找一张包含信息的表格,并将该信息复制到其他多个表格中。
例如,我会使用一所学校。学校有一张桌子,上面有所有学生的名单,他们的学生证,他们上学时,学年结束时,每个班级的成绩,地址,电话号码等。所有这些都在一张名为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)
答案 0 :(得分:2)
您必须编写多个语句,不能在一个语句中处理多个表。好消息是,它仍然没什么大不了的。
首先填写students
和classes
表。像
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;
就是这样。