进口:
LOAD DATA INFILE
INTO TABLE tmp_table
{ importing options }
(AccountName, DocumentNo, Description);
更新:
UPDATE tmp_table t1
JOIN tmp_table t2 USING (AccountName, DocumentNo)
SET t1.Description = t2.Description
WHERE t2.Description > '';
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=22c292e88fa4f9edae1c767bf81f070a
对于每个 (AccountName, DocumentNo) 对值,Description 中必须只有一个不同的非空值(即,允许多行具有非空值,但所有这些值必须相同)。如果不是,则输出是不可预测的,此外,在某些行中,一个非空值可能会被另一个非空值替换。
当然,这一切都可以通过一个(正式的)查询来完成。
您可以使用 ENGINE = CSV 选项将 CSV 文件作为表格附加,然后使用将数据复制到其中
INSERT INTO tmp_table (AccountName, DocumentNo, Description)
SELECT AccountName, DocumentNo, t2.Description
FROM csv_table t1
JOIN csv_table t2 USING (AccountName, DocumentNo)
WHERE t2.Description > '';
但您的 CSV 必须不包含在导入期间必须忽略的前缀行。
对于每个 (AccountName, DocumentNo) 对值,Description 中必须只有一个非空值。如果不是,那么tmp_table 中的行数将成倍增加。但是您可以编辑查询并将 csv_table t2 替换为根据每个 (AccountName, DocumentNo) 对值区分 Description 值的子查询。