我目前正在尝试将数据从csv文件加载到数据库中的表,插入任何新条目并更新旧条目。该表具有列(field1,field2,field3,field4,field5),其中field1作为主键,csv具有仅具有列(field1,field2,field3)的值。什么是最好的方法来解决这个问题? 目前我正在考虑按如下方式接近它:
使用类似
的查询更新旧条目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
有关改进/优化/纠正步骤的任何意见吗?
答案 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