【发布时间】:2010-12-16 06:39:13
【问题描述】:
我有一个 CSV 文件,其中包含从项目 ID 到一些新类别代码的映射。
例如
Project Id, New Code
1, 035
2, 029
3, 023
4, 035
5, 029
....
以上是CSV文件/excel文件
我有一个包含这些项目 ID 的项目表,我想添加一个包含相关新代码的新列。
有什么办法可以用mysql做到这一点吗?
【问题讨论】:
我有一个 CSV 文件,其中包含从项目 ID 到一些新类别代码的映射。
例如
Project Id, New Code
1, 035
2, 029
3, 023
4, 035
5, 029
....
以上是CSV文件/excel文件
我有一个包含这些项目 ID 的项目表,我想添加一个包含相关新代码的新列。
有什么办法可以用mysql做到这一点吗?
【问题讨论】:
这是一个使用 Excel 的 CONCATENATE 功能的快速而简单的解决方案:
假设您在 A 列中有项目 ID,在 B 列中有新代码,请为 C 列输入以下内容:
=CONCATENATE("update projects set new_code = ",B1, " where project_id = ", A1, ";")
然后将其复制并粘贴到 Excel 电子表格中的所有行。这会生成 SQL 语句,然后您可以使用它来批量更新表。将文本复制到脚本中,然后让mysql执行。
你最终会得到一个看起来像这样的脚本:
update projects set new_code = 35 where project_id = 1;
update projects set new_code = 39 where project_id = 2;
update projects set new_code = 23 where project_id = 3;
这当然假设您的表中已经有了新列。如果没有,请使用 alter table 语句添加:
alter table projects add column new_code int;
注意:如果您想重复执行此方法,我不推荐此方法 - 但如果它只是一次性的,那么像这样的快速解决方案就可以了。
【讨论】:
第一个问题是将您的 csv 导入数据库。 mysql有一些解决方案,例如 http://dev.mysql.com/doc/refman/5.1/en/mysqlimport.html
也有第三方工具可以做这些事情。
当您在数据库的新表中拥有 CSV 数据并在项目表中创建新列时,只需执行以下语句:
UPDATE projects p
SET new_code =
(select distinct new_code from temp_table where project_id = p.project_id)
【讨论】: