有一个简单的MySQL查询来添加一堆值到指定的行吗?
我有一个MySQL表,有几列,包括id
和count
。 我刚刚收到一个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 | | ... | ... |
我想结合每个id
的count
和add
字段,以便像这样更新count
,保持表中的所有其他列不变:
| id | count | |-----+-------| | ... | ... | | 348 | 3931 | | 347 | 750 | | 346 | 1241 | | 345 | 6017 | | ... | ... |
我知道MySQL可以做到,但我不知道这些步骤是什么。 我应该输出什么格式的Excel数据? CSV? TSV? 如何读取MySQL中的“调整”文件? 这种UPDATE命令的语法是什么?
您需要通过以下几个步骤来完成此操作:
-
CREATE
一个TEMPORARY TABLE
。 - 将数据
LOAD
到临时表中 -
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_load
的TEMPORARY TABLE
,由与table_to_update
列id
和count
完全相同的格式组成。 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;