是否根据外部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;
相关文章