gpt4 book ai didi

mysql - 将 CSV 数据合并到现有表中

转载 作者:行者123 更新时间:2023-11-29 18:02:51 25 4
gpt4 key购买 nike

我想将 CSV 中的数据合并到已有数据的表中:

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

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

我的 table 是这样的:

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

而 CSV 的格式如下:

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

该表没有任何约束:都是 VARCHAR(256)

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

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

最佳答案

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 注入(inject)(这都是意外的,就好像卡片文本说“for John O'Brien”一样,如果任何 csv 内容来自外部源,则可能是恶意的)。

关于mysql - 将 CSV 数据合并到现有表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48177544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com