使用条件选项将 csv 文件导入 sql Workbench

问题描述

我想将一个 csv 文件导入到工作台 MysqL

CREATE TABLE food( 
Id_food INT NOT NULL AUTO_INCREMENT,`Name` VARCHAR(255) NOT NULL,brand VARCHAR(255) NOT NULL,producer VARCHAR(255),amount INT,total_amount INT,PRIMARY KEY (Id_food) 
); 

LOAD DATA LOCAL INFILE  'file.csv'
INTO TABLE food
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LInes TERMINATED BY '%'
IGnorE 1 ROWS
(
    Name,amount,brand
);

csv 文件包含食物列表。

我想导入特定的列:

名称数量(毫升)、数量(克)和品牌。

csv中的列顺序是:

名称数量(g)、数量(ml)、品牌、过敏原....

因此数量是 csv 文件中的两列。

如果 amount(ml) 列中有一个数字,则另一个 amount(g) 列中有一个减号(“-”)。

导入时如何在金额列中合并这两列?

还有一个问题,如何在填充完金额后填充total_amount列?

解决方法

将多余/不明确的列检索到用户定义的变量中:

LOAD DATA LOCAL INFILE  'file.csv'
INTO TABLE food
FIELDS TERMINATED BY ';'
ENCLOSED BY '"'
LINES TERMINATED BY '%'
IGNORE 1 ROWS
(
    Name,@amount_ml,@amount_mg,brand,@dummy1,@dummy2,...      --  necessary amount of dummy variables according to CSV structure
)
SET amount = CASE WHEN @amount_ml > 0  -- adjust the condition due to CSV structure
                  THEN @amount_ml
                  ELSE @amount_mg
                  END
;

不要加载到同一列或变量中 - 结果将是不可预测的(甚至可能查询失败)。