2016-09-21 86 views
0

好吧,我想我可以自己弄清楚,但我似乎沒有看到它。對我來說,目標是填補表MODELOS以下列方式:設置在LOAD DATA INFILE

+--------+----------+---------+ 
| ID_MOD | ID_MARCA | MODELO | 
+--------+----------+---------+ 
|  1 |  1 | C2  | 
|  2 |  1 | C3  | 
|  3 |  1 | C4  | 
|  4 |  1 | PICASSA | 
|  5 |  2 | MONDEO | 
|  6 |  2 | S-MAX | 
|  7 |  3 | ACCORD | 
|  8 |  3 | CIVIC | 
|  9 |  4 | CLS  | 
|  10 |  5 | 900  | 
|  11 |  6 | IBIZA | 
|  12 |  6 | LEON | 
|  13 |  7 | 307  | 
|  14 |  7 | 308  | 
|  15 |  7 | 407  | 
|  16 |  7 | 408  | 
|  17 |  8 | MEGANE | 
|  18 |  9 | GOLF | 
|  19 |  9 | PASSAT | 
|  20 |  9 | TOUAREG | 
+--------+----------+---------+ 

我有這個表:

"MARCA"#"MODELO"#"MATRICULA"#PRECIO 
"CITROEN"#"PICASSA"#"CPG-2044"#12000 
"CITROEN"#"PICASSA"#"CPR-1762"#12500 
"CITROEN"#"C4"#"FPP-1464"#13500 
"CITROEN"#"C4"#"FDR-4563"#13000 
"CITROEN"#"C3"#"BDF-8856"#8000 
"CITROEN"#"C3"#"BPZ-7878"#7500 
"CITROEN"#"C2"#"CDR-1515"#5000 
"CITROEN"#"C2"#"BCC-3434"#4500 
"FORD"#"MONDEO"#"BTG-3267"#8000 
"FORD"#"MONDEO"#"BPP-6792"#8200 
"FORD"#"S-MAX"#"FDR-1564"#20000 
"FORD"#"S-MAX"#"FCE-9327"#21000 
"HONDA"#"CIVIC"#"FCC-7764"#16000 
"HONDA"#"CIVIC"#"FBC-4567"#14000 
"HONDA"#"ACCORD"#"FFC-6768"#22000 
"HONDA"#"ACCORD"#"FPB-2231"#23000 
"MERCEDES"#"CLS"#"FDR-2265"#31000 
"SAAB"#"900"#"FPG-1165"#21000 
"SEAT"#"LEON"#"DVB-1119"#14500 
"SEAT"#"LEON"#"DCR-5634"#13500 
"SEAT"#"IBIZA"#"DPR-3434"#9500 
"SEAT"#"IBIZA"#"DPP-8756"#10000 
"PEUGEOT"#"307"#"DGX-4598"#5500 

等:

mysql> select * from MARCAS; 
+----------+------------+ 
| ID_MARCA | MARCA  | 
+----------+------------+ 
|  1 | CITROEN | 
|  2 | FORD  | 
|  3 | HONDA  | 
|  4 | MERCEDES | 
|  7 | PEUGEOT | 
|  8 | RENAULT | 
|  5 | SAAB  | 
|  6 | SEAT  | 
|  9 | VOLKSWAGEN | 
+----------+------------+ 

和下面的文件一起工作

現在,我所取得的成果是:

mysql> select * from MODELOS; 
+--------+----------+---------+ 
| ID_MOD | ID_MARCA | MODELO | 
+--------+----------+---------+ 
|  1 |  NULL | MODELO | 
|  2 |  NULL | PICASSA | 
|  3 |  NULL | C4  | 
|  4 |  NULL | C3  | 
|  5 |  NULL | C2  | 
|  6 |  NULL | MONDEO | 
|  7 |  NULL | S-MAX | 
|  8 |  NULL | CIVIC | 
|  9 |  NULL | ACCORD | 
|  10 |  NULL | CLS  | 
|  11 |  NULL | 900  | 
|  12 |  NULL | LEON | 
|  13 |  NULL | IBIZA | 
|  14 |  NULL | 307  | 
|  15 |  NULL | 308  | 
|  16 |  NULL | 407  | 
|  17 |  NULL | 408  | 
|  18 |  NULL | MEGANE | 
|  19 |  NULL | PASSAT | 
|  20 |  NULL | GOLF | 
|  21 |  NULL | TOUAREG | 
+--------+----------+---------+ 

使用,這些命令:

ALTER TABLE MODELOS ADD UNIQUE(MODELO); 
LOAD DATA LOCAL INFILE myfile.txt 
IGNORE INTO TABLE MODELOS 
FIELDS TERMINATED BY '#' ENCLOSED BY '"' 
LINES ENDED BY '\n' 
IGNORE 1 LINES 
(@ignore1, MODELO, @ignore2, @ignore3); 

我怎樣才能得到這創造所需的輸出?我懷疑最簡單的方法是使用LOAD DATA INFILE中的SET語句,但我不知道該怎麼做?

+0

我建議分兩步做。首先按照你寫的加載到'MODELOS'中,然後使用'UPDATE MODELOS JOIN MARCAS'合併到'ID_MARCA'字段中。 – Barmar

+0

我的確想到了它。但不知道是否2步法將與我的導師飛行。然而,如果有其他事情失敗,這是值得考慮的。 – CNB

回答

0

您可以在SET子句中進行查詢。

LOAD DATA LOCAL INFILE myfile.txt 
IGNORE INTO TABLE MODELOS 
FIELDS TERMINATED BY '#' ENCLOSED BY '"' 
LINES ENDED BY '\n' 
IGNORE 1 LINES 
(@marca, modelo, @ignore2, @ignore3) 
SET ID_MARCA = (SELECT ID_MARCA FROM MARCAS WHERE MARCA = @marca) 

這使用了第一列文件中查找相應的ID在表MARCAS

+0

這給了我和以前完全一樣的結果。你能否詳細說一下SET語句的工作原理?也許我可以做出簡單的改變,並且會使整體變得更加完美?感謝您的輸入。這是appreaciated。 – CNB

+0

我誤解了這個文件,我不理解這個文件和'MARCAS'表之間的關係。嘗試使用用戶變量「@ marca」作爲文件第一列的新文件。 – Barmar

+0

我曾嘗試過(與其他一些組合一起),它不會將任何數據加載到ID_MARCA列(我需要弄清楚爲什麼)。我已經放棄了(現在反正),只是通過臨時表來完成。再次感謝您的輸入。 – CNB