3

を使用して MYSQL (MAMP) にデータをロードしようとしていますLOAD DATA LOCAL INFILE。データベース テーブルで指定されたデータ要素の一部は、データ ファイル (複数の 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 ;
4

3 に答える 3

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

于 2012-11-14T04:11:03.167 に答える
1

マッピングはLOAD DATAステートメントで定義されます。列の順序を変更したい場合は、CSV ファイルにあるものと一致するように列を調整する必要があります。

そのIGNORE 1 LINES部分は、一般的な CSV ヘッダー ラベルをスキップするものです。これらはインポート手順では使用されません。

この場合、SET location_name=location_affected意味がありません。location_name列にインポートする場合は、定義で指定します。

于 2012-11-14T03:55:54.067 に答える
-1

マッピングは、LOAD DATA ステートメントで定義されます。列の順序を変更したい場合は、CSV ファイルにあるものと一致するように列を調整する必要があります。

IGNORE 1 LINES 部分は、典型的な CSV ヘッダー ラベルをスキップするものです。これらはインポート手順では使用されません。

この場合、SET location_name=location_affected は意味がありません。location_name 列にインポートする場合は、定義で指定します

于 2013-05-15T19:10:46.187 に答える