首页 > 解决方案 > MYSQL 使用 LOAD DATA INFILE 从 .csv 导入数据,升序到特定列

问题描述

我已从 .csv 文件加载数据,并使用 LoadData 方法将其插入数据库。

以下查询对我有用:

LOAD DATA LOCAL INFILE '"$FILE1"' 
INTO TABLE inventory FIELDS 
TERMINATED BY ','
ENCLOSED BY '\"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES (@ignore ,StockType ,StockNo ,ServiceVIN ,YearMake ,CMake ,SModel ,BodyType ,Color ,Interiorcolor ,@ignore ,EngineSize ,@ignore ,Transmission ,Miles ,List ,@ignore ,@ignore ,Drive ,@ignore ,Details ,@ignore ,ModelType ,@ignore ,@ignore ,@ignore ,Trim) 
SET CreatedAt = NOW();"

但是我需要在 List Column 中按升序插入数据。这可能吗?

我在这个查询中尝试过 orderby 但它不起作用。

工作查询:

LOAD DATA LOCAL INFILE '"$FILE1"' 
INTO TABLE inventory FIELDS TERMINATED BY ',' 
ENCLOSED BY '\"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES (@ignore ,StockType ,StockNo ,ServiceVIN ,YearMake ,CMake ,SModel ,BodyType ,Color ,Interiorcolor ,@ignore ,EngineSize ,@ignore ,Transmission ,Miles ,List ,@ignore ,@ignore ,Drive ,@ignore ,Details ,@ignore ,ModelType ,@ignore ,@ignore ,@ignore ,Trim) 
SET CreatedAt = NOW();"

标签: mysqlcsvimportsql-order-byload-data-infile

解决方案


如果数据量不太大,可以将语句的结果作为SELECT语句的数据源INSERT

一步步:

LOAD DATA LOCAL INFILE '"$FILE1"' 
INTO TABLE inventory FIELDS TERMINATED BY ',' 
ENCLOSED BY '\"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES (@ignore ,StockType ,StockNo ,ServiceVIN ,YearMake ,CMake ,SModel ,BodyType ,Color ,Interiorcolor ,@ignore ,EngineSize ,@ignore ,Transmission ,Miles ,List ,@ignore ,@ignore ,Drive ,@ignore ,Details ,@ignore ,ModelType ,@ignore ,@ignore ,@ignore ,Trim) 
SET CreatedAt = NOW();"

INSERT INTO inventory(column_list)
SELECT 
   select_list 
FROM inventory_tmp
ORDER BY column1

您可以在此处阅读更多详细信息:http ://www.mysqltutorial.org/mysql-insert-into-select/

选项 2: 您还可以在导入数据库之前对文本文件进行排序。遵循本指南:https ://stackoverflow.com/a/2100384/12263045


推荐阅读