LOAD DATA INFILE时db和csv文件中的不同列名

时间:2012-11-14 02:52:54

标签: mysql

我正在尝试使用LOAD DATA LOCAL INFILE将数据加载到MYSQL(在MAMP中)。数据库表中指定的某些数据元素与数据文件中的列名称(多个csv文件)不同。例如:数据库有一列'location_affected',数据文件的列名为'location_name',用于同一数据元素。此外,数据文件不具有相同数量的列,也不具有相同的列名。每个数据文件可能包含数据库表中指定的~200个数据元素中的大约30-40列。任何人都可以建议如何映射db表和csv文件之间的列名?我尝试了以下但它引发了一个错误:“location_name不存在”

LOAD DATA LOCAL INFILE 'pathtothefile' INTO TABLE tablename 
 FIELDS TERMINATED BY ',' ENCLOSED BY '"'
 LINES TERMINATED BY '\r'
 IGNORE 1 LINES 
(col1,col2,col3..............)
SET location_name = location_affected ;

3 个答案:

答案 0 :(得分:2)

您可以通过将列分配给虚拟变量来跳过列:

LOAD DATA LOCAL INFILE 'pathtothefile' INTO TABLE tablename 
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r'
IGNORE 1 LINES 
(col1,col2,@skipme,@skipme,col3..............);

http://dev.mysql.com/doc/refman/5.1/en/load-data.html

答案 1 :(得分:1)

映射在LOAD DATA语句中定义。如果要重新排序列,则应在那里调整它们以匹配CSV文件中的任何内容。

IGNORE 1 LINES部分是跳过典型CSV标头标签的部分。导入程序不使用它们。

在这种情况下,SET location_name=location_affected毫无意义。如果要导入location_name列,请在定义中指定。

答案 2 :(得分:0)

映射在LOAD DATA语句中定义。如果要重新排序列,则应在那里调整它们以匹配CSV文件中的任何内容。

IGNORE 1 LINES部分是跳过典型CSV标题标签的部分。导入程序不使用它们。

在这种情况下,SET location_name = location_affected毫无意义。如果要导入location_name列,请在定义中指定