插入时搜索和更新

ohtdti5x  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(331)

客户机需要迁移大量的数据,我觉得这个问题可能非常普遍。
遗产系统
学生档案包含姓名、电子邮件等字段,以及大学名称。大学名称被表示为一个字符串,因此被重复,这是浪费和缓慢的。
我们的新形式
一个更有效的解决方案是有一个名为 university 只存储一次带有外键的大学名称( university_id )html下拉列表只是发布 university_id 到服务器。这使事情做得更快 GROUP BY 例如,查询。进入数据库的新表单数据工作正常。
问题
如何编写一个将插入所有其他列的查询( first_name , last_name , email ,而不是插入 university 弦,找出它的 university_iduniversity 并插入相应的int而不是原始字符串(场景:数据位于csv文件中,我们将对其进行操作(插入到语法中)
非常感谢。

3qpi33ja

3qpi33ja1#

使用 INSERT INTO ... SELECT 用一个 LEFT JOIN . 选择left,这样当学生记录的university\u 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 .

相关问题