在 INSERT 上搜索和更新

Search and update on INSERT

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

旧系统

学生资料包含姓名、电子邮件等字段,以及大学名称。大学名称以字符串表示,因此会重复,既浪费又缓慢。

我们的新形态

一个更有效的解决方案是使用一个名为 university 的 table,它只使用外键 (university_id) 和 HTML 下拉列表存储一次大学名称只需将 university_id 发布到服务器。例如,这使得执行 GROUP BY 查询的速度更快。进入数据库的新表单数据工作正常。

问题

我们如何编写一个查询来插入所有其他列(first_namelast_nameemail、...),然后 而不是插入 university 字符串,从 university table 中找出其 university_id 并插入相应的 int 而不是原始字符串?(场景:数据是在我们将使用 INSERT INTO 语法操作的 CSV 文件中)

非常感谢。

使用 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

Table 和列名要替换为真实的。以上假设持有大学外键的学生的新 table 是 students_new,而旧的(标准化之前的)是 students_old.