LOAD DATA LOCAL INFILE在内部联接更新的情况下生成null

时间:2017-11-20 14:10:11

标签: mysql sql opencart

我试图在我的opencart数据库中上传文件,我想批量上传产品UPC号码,我正在使用此查询:

e.preventDefault

首先,我使用以下查询导出了包含产品ID,产品名称和产品UPC的列的表:

CREATE TEMPORARY TABLE  `my_temp_table`
(
     product_id INT(11),
     name VARCHAR(255),
     upc VARCHAR(12)
); 

LOAD DATA LOCAL INFILE '/home/mupckuco/dev/oc_product.csv'
INTO TABLE `my_temp_table`
FIELDS TERMINATED BY ','
(`product_id`, `name`, `upc`);

UPDATE `oc_product`
INNER JOIN `my_temp_table` on `my_temp_table`.`product_id` = `oc_product`.`product_id`
SET `oc_product`.`upc` = `my_temp_table`.`upc`;

DROP TEMPORARY TABLE `my_temp_table`;

但不幸的是,这一行

SELECT  `oc_product`.`product_id` ,  `oc_product_description`.`name` ,  `oc_product`.`upc` 
FROM  `oc_product` 
INNER JOIN  `oc_product_description` ON  `oc_product`.`product_id` =  `oc_product_description`.`product_id` 

在表中插入NULL。

我首先尝试创建一个普通表(不是临时表)所以我看到UPC列中的所有内容都插入为NULL。

我正在为Microsoft Excel导出为CSV,并且我使用相同的扩展名保存文件。问题出在哪里?

这是csv文件中的一些示例和更新后的my_temp_table结果:

excel csv

my_temp_table

1 个答案:

答案 0 :(得分:1)

哇,我似乎从未尝试过将CSV直接导入数据库,然后使用JOIN运行更新,也许你的背景是DBA而不是PHP开发人员?

无论如何,我建议您将CSV导入PHP中的数组:

$csv = array_map('str_getcsv', file('/home/mupckuco/dev/oc_product.csv'));

然后循环它以生成UPDATE语句。