从tmp数据库中的表插入并更新到另一个数据库中的表

时间:2016-05-26 22:08:55

标签: mysql csv insert sql-update

我目前正在尝试将数据从csv文件加载到数据库中的表,插入任何新条目并更新旧条目。该表具有列(field1,field2,field3,field4,field5),其中field1作为主键,csv具有仅具有列(field1,field2,field3)的值。什么是最好的方法来解决这个问题? 目前我正在考虑按如下方式接近它:

  • 在tmp中创建一个表,比如说tmp_table
  • 使用'LOAD DATA'
  • 在tmp_table中加载csv
  • 使用类似

    的查询更新旧条目
    UPDATE db.table1 t INNER JOIN tmp.tmp_table s ON (t.field1=s.field1)
    SET t.field1 = s.field1, t.field2 = s.field2, t.field3 = s.field3
    
  • 插入新条目

    INSERT INTO db.table1(field1, field2, field3)
    SELECT t.field1, t.field2, t.field3 
    FROM tmp.tmp_table t 
    LEFT JOIN db.table1 v ON (t.field1=v.field1) 
    WHERE v.field1=NULL
    

有关改进/优化/纠正步骤的任何意见吗?

1 个答案:

答案 0 :(得分:1)

由于您使用的是MySQL,我建议使用这种非通用解决方案。

在tmp表中包含field4和field5。

使用table1中现有记录的值创建tmp表更新field4和field5之后。

UPDATE tmp.tmp_table s INNER JOIN db.table1 t ON (t.field1=s.field1)
SET s.field4 = t.field4, s.field5 =t.field5

然后

REPLACE INTO db.table1 VALUES (field1, field2, field3, field4, field5)
SELECT t.field1, t.field2, t.field3, t.field4, t.field5 
FROM tmp.tmp_table t