Ich habe eine CSV-Datei mit 11 Spalten und eine MySQL-Tabelle mit 9 Spalten.
Die CSV-Datei sieht folgendermaßen aus:
col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11
und die MySQL-Tabelle sieht folgendermaßen aus:
col1, col2, col3, col4, col5, col6, col7, col8, col9
Ich muss die Spalten 1-8 der CSV-Datei direkt den ersten 8 Spalten der MySQL-Tabelle zuordnen. Ich muss dann die nächsten beiden Spalten in der CSV-Datei überspringen und dann Spalte 11 der CSV-Datei der Spalte 9 der MySQL-Tabelle zuordnen.
Im Moment verwende ich den folgenden SQL-Befehl:
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'
Der obige Code ordnet jedoch die ersten 9 Spalten der CSV-Datei den 9 Spalten in der MySQL-Tabelle zu.
Sie können einen Eingabewert auch mit .__ löschen. Zuweisung zu einer Benutzervariable und die Variable keiner Tabelle zuweisen Säule:
LOAD DATA INFILE 'file.txt'
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
step1.deal mit awk.
cat file.txt |awk '{print $1,$2,$5...}'>new_file.txt
step2.load in mysql.
load data local infile 'new_file' into table t1(...)
die unten beschriebene Methode ist einfach, aber in der niedrigeren Version von MySQL nicht zulässig.
LOAD DATA INFILE 'file.txt'
INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
@ deemi :
Die einzige Möglichkeit, den @dummy
zu ignorieren, besteht darin, die Standardeinstellung des Feldes auf AUTO INCREMENT
..__ zu setzen. So können Sie das Feld überspringen und einfach wie folgt codieren.
LOAD DATA INFILE 'file.txt'
INTO TABLE t1 (column2, column3, column4, column5);
// setzt voraus, dass der Feldname column1
standardmäßig auf AUTO INCREMENT
festgelegt ist.
Ich denke, es gibt eine weitere Änderung im Code:
Der folgende SQL-Befehl:
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'
-wird wahrscheinlich zu einem Datenkürzungsfehler führen.
Daher ist es besser, LINES TERMINATED BY '\r\n'
anstelle von LINES TERMINATED BY '\n'
zu verwenden.
SO wird der Code sein:
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\r\n'