【问题标题】:Search and update on INSERT在 INSERT 上搜索和更新
【发布时间】:2018-06-20 22:56:10
【问题描述】:

客户需要迁移大量数据,我觉得这个问题对于 SO 来说已经足够笼统了。

旧系统

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

我们的新表格

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

问题

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

非常感谢。

【问题讨论】:

    标签: mysql join insert-into


    【解决方案1】:

    使用INSERT INTO ... SELECTLEFT JOIN。选择 Left 以便学生记录在 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

    【讨论】:

    • 迁移成功,上面介绍的 JOIN 工作完美。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多