将MySQL中的多个单元格拆分为多行

时间:2019-09-30 10:28:34

标签: mysql

我有下表。

表1

ID   icc      bcci
1    402,403  101,102
2    403,404  103,105,106

我想按以下方式获取结果

结果

ID    icc    bcci
1     402    101
1     402    102
1     403    101
1     403    102
2     403    103
2     403    105
2     403    106
2     404    103
2     404    105
2     404    106

1 个答案:

答案 0 :(得分:0)

I have a table of integers - ints(i) running from 0-9...

DROP TABLE IF EXISTS my_bad_table;

CREATE TABLE my_bad_table
(id SERIAL PRIMARY KEY
,icc VARCHAR(255) NOT NULL
,bcci VARCHAR(255) NOT NULL
);

INSERT INTO my_bad_table VALUES
(1,'402,403','101,102'),
(2,'403,404','103,105,106');

[CREATE TABLE my_good_table AS]
SELECT DISTINCT a.id
     , a.icc
     , b.bcci
  FROM
(
SELECT DISTINCT id
              , SUBSTRING_INDEX(SUBSTRING_INDEX(icc,',',i+1),',',-1)icc
              , SUBSTRING_INDEX(SUBSTRING_INDEX(bcci,',',i+1),',',-1)bcci
           FROM my_bad_table
              , ints
) a
JOIN
(
SELECT DISTINCT id
              , SUBSTRING_INDEX(SUBSTRING_INDEX(icc,',',i+1),',',-1)icc
              , SUBSTRING_INDEX(SUBSTRING_INDEX(bcci,',',i+1),',',-1)bcci
           FROM my_bad_table
              , ints
) b
ON b.id = a.id
ORDER 
BY id,icc,bcci;

+----+-----+------+
| id | icc | bcci |
+----+-----+------+
|  1 | 402 | 101  |
|  1 | 402 | 102  |
|  1 | 403 | 101  |
|  1 | 403 | 102  |
|  2 | 403 | 103  |
|  2 | 403 | 105  |
|  2 | 403 | 106  |
|  2 | 404 | 103  |
|  2 | 404 | 105  |
|  2 | 404 | 106  |
+----+-----+------+

然后在id,icc,bcci上添加主键。

实际上,对于您的情况,更简单的查询就足够了,但希望您能理解。