Update an existing sql table based on content from an external csv file?(是否根据外部CSV文件中的内容更新现有SQL表?)
本文介绍了是否根据外部CSV文件中的内容更新现有SQL表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个这样的表:
密钥名称地址
1 AAA**
2ABC**
3 BDC**
4 CDA**
5 dda** .
现在我有另一个平面文件(制表符分隔的CSV文件),如下所示:
命名电话
ABC**
dda**
AAA**
此平面文件将只包含原始表中的部分条目。我想根据平面文件中的内容更新表(基本上是进行联接)。目前,我正在考虑写一些php脚本来做到这一点。基本上,将平面文件作为数组加载,并让php代码执行实际搜索和更新。有没有更简单/更好的方法来完成这项任务?有人建议使用名为phpmyadmin的工具,但该工具似乎无法处理此级别的复杂任务。
谢谢。
推荐答案
您可以创建一个临时表,将文件加载到其中,然后更新持久表。
CREATE TEMPORARY TABLE tmp
(
name varchar(255),
phone varchar(255),
address varchar(255)
INDEX (name)
);
LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE tmp
FIELDS TERMINATED BY ' '
LINES TERMINATED BY '
'
(@name, @phone, @address)
SET
name = @name,
phone = @phone
address = @address;
如果要忽略CSV的前n行,请在LINES TERMINATED
行之后添加以下行。
IGNORE n LINES
最后,根据临时行将行添加/更新表。
假设您要使用列名来标识表中是否已经存在CSV中的行,您可以这样做:
INSERT INTO tbl (name, phone, address)
SELECT name, phone, address FROM tmp WHERE name NOT IN (SELECT name FROM table);
若要更新现有行,可以使用UPDATE WITH JOIN。
UPDATE tbl a
JOIN tmp b ON a.name = b.name
SET a.phone = b.phone,
a.address = b.address;
这篇关于是否根据外部CSV文件中的内容更新现有SQL表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:是否根据外部CSV文件中的内容更新现有SQL表?
基础教程推荐
猜你喜欢
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01