我想将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中创建这样的查询?
答案 0 :(得分:0)
MySQL并没有完全按照你要求的功能。可能有数据库客户端可以为您执行此操作,但您最好的选择是以旧式方式执行此操作。
首先,将csv文件加载到数据库中的新表中。大多数数据库客户端都可以为您执行此操作,但如果您想从shell执行此操作,则可以查看mysqlimport
或LOAD 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内容可能是恶意的来自外部来源)。