Mysql 导入包含多条记录的CSV-更新多行
我有一张表,上面有大约10万个项目编号:Mysql 导入包含多条记录的CSV-更新多行,mysql,sql,database,Mysql,Sql,Database,我有一张表,上面有大约10万个项目编号: id,itemnumber,text,原始数量,计数数量 我现在正在导入一个可能包含100K条记录的CSV文件: 项目编号\u在,数量 它包含实际库存的计数-然后我现在需要为CSV中的每条记录更新主数据库中的“计数数量” 我该怎么做呢?我是否会从头到尾阅读文件中的每一行并执行以下操作: UPDATE maintable SET counted_qty = counted_qty + qty WHERE itemnumber_in = itemnumber
id
,itemnumber
,text
,原始数量
,计数数量
我现在正在导入一个可能包含100K条记录的CSV文件:
项目编号\u在
,数量
它包含实际库存的计数-然后我现在需要为CSV中的每条记录更新主数据库中的“计数数量”
我该怎么做呢?我是否会从头到尾阅读文件中的每一行并执行以下操作:
UPDATE maintable SET counted_qty = counted_qty + qty WHERE itemnumber_in = itemnumber
或者是否有更智能/更快的方法来执行此操作。使用
加载数据读入CSV文件,然后使用连接更新项目编号
:
UPDATE itemnumbers a INNER JOIN import b
ON a.itemnumber = b.itemnumber_in
SET a.counted_qty = a.counted_qty + b.qty
这种方法的好处是,itemnumbers
中的记录只有在与输入CSV文件中的内容匹配时才会更新
更新:
如果首先要按id号聚合导入的数据,则可以在UPDATE
语句中使用子查询:
UPDATE itemnumbers a
INNER JOIN
(
SELECT itemnumber_in, SUM(qty) AS qty
FROM import
GROUP BY itemnumber_in
) b
ON a.itemnumber = b.itemnumber_in
SET a.counted_qty = a.counted_qty + b.qty
非常感谢-如果CSV文件中有多个相同itemnumber的实例(将有),这也会起作用吗?那么您是说相同的id可能会在导入中出现多次?如果是这样的话,那么您想聚合数量字段吗?是的,例如,itemnumber 11223344可以有50个数量-但CSV文件中可以有50个数量为1的记录。@thorway我用一种方法更新了我的答案,我认为如果您想先聚合导入数据,这种方法是可行的。