【问题标题】:Import csv comma separated values into Table as multiple rows将 csv 逗号分隔值作为多行导入表中
【发布时间】: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

标签: mysql 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    |
+-------+------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多