将 csv 逗号分隔值作为多行导入表中
Posted
技术标签:
【中文标题】将 csv 逗号分隔值作为多行导入表中【英文标题】:Import csv comma separated values into Table as multiple rows 【发布时间】:2020-06-02 07:06:52 【问题描述】:我有一个看起来像这样的 .csv 文件:
test1; A,B
test2; B
test3; A,B,C
我想要的是这样的表格:
test1 A
test1 B
test2 B
test3 A
test3 B
test3 C
我已经取得的成就:
LOAD DATA LOCAL INFILE 'path.csv'
INTO TABLE table1
FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n'
(col1, col2);
但它会跳过所有在第二个字段中有多个逗号分隔值的行...
很抱歉,如果这已经被问到了,但我几天来一直在努力寻找解决方案......
【问题讨论】:
负载数据无法处理。在加载之前修复数据(首选方法)或加载然后拆分。 你有一个 1:n 的关系并且想要“展开”成 1:1,但是在多行中。我同意@P.Salmon 的观点,您需要更改数据。我会用 perl、autoit3、python 或类似工具来做这件事。有趣的是,您是否曾经有重复的“testX”? 这看起来不像 csv 【参考方案1】:考虑以下问题。部分原因是我仍在使用相当旧版本的 mysql,我有一个整数 (ints) 实用表,其值为 0-9...
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(my_string VARCHAR(100) NOT NULL);
INSERT INTO my_table VALUES
('test1; A,B'),
('test2; B'),
('test3; A,B,C');
SELECT DISTINCT
SUBSTRING_INDEX(my_string,';',1) test
, TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(my_string,';',-1),',',i+1),',',-1)) vals
FROM my_table
, ints;
+-------+------+
| test | vals |
+-------+------+
| test1 | A |
| test2 | B |
| test3 | A |
| test1 | B |
| test3 | B |
| test3 | C |
+-------+------+
【讨论】:
以上是关于将 csv 逗号分隔值作为多行导入表中的主要内容,如果未能解决你的问题,请参考以下文章