搜索并更新INSERT

时间:2018-06-20 22:56:10

标签: mysql join insert-into

客户需要迁移大量数据,我觉得这个问题对于SO来说可能足够通用。

旧版系统

学生个人资料包含姓名,电子邮件等字段以及大学名称。大学名称用字符串表示,因此重复是很浪费和缓慢的。

我们的新表格

一种更有效的解决方案是创建一个名为university的表,该表仅使用一次外键(university_id)存储一次大学名称,而HTML下拉列表仅将university_id张贴到服务器。例如,这使执行GROUP BY查询的过程变得更快。进入数据库的新表单数据可以正常工作。

问题

我们如何编写一个查询来插入所有其他列(first_namelast_nameemail,...),但随后又而不是插入{{ 1}}字符串,从university表中找出其university_id并插入相应的int而不是原始字符串?(场景:数据位于CSV文件中,我们将对其进行处理INSERT INTO语法)

非常感谢。

1 个答案:

答案 0 :(得分:2)

INSERT INTO ... SELECTLEFT JOIN一起使用。选择“左”,以便如果学生记录的university_name值为空,则该记录不会被丢弃。

INSERT INTO students_new(first_name, last_name, email, university_id)
SELECT s.first_name, s.last_name, s.email, u.university_id
FROM students_old s
LEFT JOIN university u ON s.university_name = u.university_name

表和列的名称将替换为真实的。以上假设您为持有大学外键的学生创建的新表为students_new,而旧表(归一化之前)为students_old