1

我有一个包含多个列的 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     |
| ... | ...   |

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

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

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

4

2 回答 2

2

您需要通过几个步骤来执行此操作:

  1. CREATE一个TEMPORARY TABLE
  2. LOAD将数据放入临时表
  3. UPDATE原始表, JOIN对临时表使用 a。

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

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

这将创建一个TEMPORARY TABLE被调用的 ,由与列和data_to_load完全相同的格式组成。永远不会匹配,所以它只是复制表格的格式而不是数据。table_to_updateidcountWHERE 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现有数据,通过JOINing 与您的新表:

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`
;
于 2012-10-08T20:19:03.163 回答
1

使用类似这样的技术从 csv 导入您的值。一旦你有了那张桌子,试试这个。如果您的原始表称为“counts”,而您的新表称为“adds”,则此查询将显示组合是什么:

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;
于 2012-10-08T20:06:38.517 回答