将CSV数据合并到现有表中

时间:2018-01-09 22:27:05

标签: mysql csv

我想将CSV中的数据合并到已存在的包含数据的表中:

我已经拥有的表有4列,其中2列是NULL。我的CSV文件有3列:一列是用于匹配表的主键,另一列是用于填充我已存在的表的信息。

我希望能够将CSV的主键与表格的主键进行匹配,并将CSV中的信息插入到匹配的行中。

我的表格如下:

+--------+----------------+------+
| CardID | Topic | Number | Date |
+--------+----------------+------+
 pk00001 | name  | NULL   | NULL |
+--------+----------------+------+

而CSV如下:

"ID","Number","Date"
"pk00001","100001","1999/01/01"

表格没有任何限制:它全是VARCHAR(256)

但是,我的表格中的行数多于CSV,操作不应触及这些行。

是否可以在MySQL中创建这样的查询?

1 个答案:

答案 0 :(得分:0)

MySQL并没有完全按照你要求的功能。可能有数据库客户端可以为您执行此操作,但您最好的选择是以旧式方式执行此操作。

首先,将csv文件加载到数据库中的新表中。大多数数据库客户端都可以为您执行此操作,但如果您想从shell执行此操作,则可以查看mysqlimportLOAD DATA INFILE

一旦您的数据在您的表格中(您可能也希望索引该键,具体取决于大小),您可以通过加入新表格进行简单更新。

UPDATE
    original_table
SET
    CardName = new.CardName,
    CardText = new.CardText,
    -- ...And the rest of your columns to update
FROM
    original_table old
    join imported_table new
        on (old.CardID=new.CardID)

然后放下你的csv表,你就可以了。

一个简单(但更危险且性能更低)的替代方法是在Excel中打开csv文件并使用公式为您生成UPDATE语句。例如:

="UPDATE original_table SET CardName='"&B1&"', CardText='"&C1&"' WHERE CardID='"&A1&"'"

然后只使用此公式填充每一行,并且您将为要修改的每一行都有一个更新语句。

请注意,这种Excel方法可以让您打开SQL注入(两者都是偶然的,就像Card Text说的那样#34;对于John O' Brien",如果有任何csv内容可能是恶意的来自外部来源)。