有一个简单的MySQL查询来添加一堆值到指定的行吗?

我有一个MySQL表,有几列,包括idcount 。 我刚刚收到一个Excel电子表格,其中的项目id与必须添加到每行的count数字配对。

例如,这里是数据的一个子集,只显示相关的列:

 | id | count | |-----+-------| | ... | ... | | 348 | 165 | | 347 | 364 | | 346 | 381 | | 345 | 6017 | | ... | ... | 

而这个来自Excel电子表格的数据:

 | id | add | |-----+-------| | ... | ... | | 348 | 3,766 | | 347 | 386 | | 346 | 860 | | 345 | 0 | | ... | ... | 

我想结合每个idcountadd字段,以便像这样更新count ,保持表中的所有其他列不变:

 | id | count | |-----+-------| | ... | ... | | 348 | 3931 | | 347 | 750 | | 346 | 1241 | | 345 | 6017 | | ... | ... | 

我知道MySQL可以做到,但我不知道这些步骤是什么。 我应该输出什么格式的Excel数据? CSV? TSV? 如何读取MySQL中的“调整”文件? 这种UPDATE命令的语法是什么?

您需要通过以下几个步骤来完成此操作:

  1. CREATE一个TEMPORARY TABLE
  2. 将数据LOAD到临时表中
  3. UPDATE原始表,使用JOIN临时的。

CREATE [TEMPORARY] TABLE语法很简单。 这就像创build一个表,但会话结束时会消失。 表格格式应与您要更新的列匹配。 这可以简单地使用CREATE ... (SELECT...)语法完成,例如:

 CREATE TEMPORARY TABLE `data_to_load` ( SELECT `id`, `count` FROM `table_to_update` WHERE 0 ); 

这将创build一个名为data_to_loadTEMPORARY TABLE ,由与table_to_updateidcount完全相同的格式组成。 WHERE 0永远不会匹配,所以它只是复制表格的格式 ,而不是数据。

接下来, LOAD数据。 格式不挑剔,你只需要指定它。 对于Excel使用的标准CSV格式,该命令将是:

 LOAD DATA INFILE 'exported_data.csv' INTO TABLE `data_to_load` FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' ( `id`, `count` ); 

最后, UPDATE现有的数据, JOIN你的新表:

 UPDATE `table_to_update` INNER JOIN `data_to_load` ON `data_to_load`.`id` = `table_to_update`.`id` SET `table_to_update`.`count` = `table_to_update`.`count` + `data_to_load`.`count` ; 

使用像这样的技术从csv导入你的值。 一旦你有了这个表,试试这个。 如果你的原始表被称为“计数”,而你的新表被称为“增加”,这个查询将显示你的组合将是什么:

 select a.id,a.count,b.add,a.count + b.add as sum from counts as a, adds as b where a.id = b.id; 

如果它正在做你想做的,然后更新:

 update counts set counts.count = counts.count + adds.add where counts.id = adds.id;