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表?
基础教程推荐
猜你喜欢
- 表 './mysql/proc' 被标记为崩溃,应该修复 2022-01-01
- 在多列上分布任意行 2021-01-01
- oracle区分大小写的原因? 2021-01-01
- 什么是 orradiag_<user>文件夹? 2022-01-01
- MySQL 中的类型:BigInt(20) 与 Int(20) 2021-01-01
- 如何根据该 XML 中的值更新 SQL 中的 XML 2021-01-01
- mysql选择动态行值作为列名,另一列作为值 2021-01-01
- 二进制文件到 SQL 数据库 Apache Camel 2021-01-01
- 如何在 SQL 中将 Float 转换为 Varchar 2021-01-01
- 在 MySQL 中:如何将表名作为存储过程和/或函数参数传递? 2021-01-01
