数据库
首页 > 数据库> > mysql – 根据外部csv文件中的内容更新现有的sql表?

mysql – 根据外部csv文件中的内容更新现有的sql表?

作者:互联网

我有这样一张桌子:

密钥名称地址

1 aaa **

2 abc **

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 '\t'
LINES TERMINATED BY '\n'
(@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);

要更新现有行,您将使用JOIN更新.

UPDATE tbl a 
JOIN tmp b ON a.name = b.name 
SET a.phone = b.phone,
    a.address = b.address;

标签:mysql,sql,phpmyadmin,jointable
来源: https://codeday.me/bug/20190714/1459695.html