在MySql

时间:2015-05-25 11:38:41

标签: mysql split

我在mysql数据库中有一个表。在表中,一列用逗号分隔存储值。

现在我想将行分成多行,其中出现逗号符号。

示例:

id          column1

----------------------------

1          a,b,c
2          c,f
3          s,d,f,g
4          p
5          k,h,s

就像..............

使用此表格数据我想如下所示。

id          column1
----------------------------
1          a
1          b
1          c
2          c
2          f
3          s
3          d
3          f
3          g
4          p
5          k
5          h
5          s

等...............

任何人都可以为我提供如何通过mysql查询获取所需输出的解决方案。

在Sql中,我使用了split函数,但是如果我在mysql中使用了相同的函数,则它无效。

先谢谢, Phani kumar。

1 个答案:

答案 0 :(得分:0)

你是从错误的地方开始的。您永远不应该存储逗号分隔值。也就是说,你正朝着正确的方向前进,所以这是从a到b的一种方式......

DROP TABLE IF EXISTS my_bad_table;

CREATE TABLE my_bad_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
,column1 VARCHAR(20) NOT NULL
);

INSERT INTO my_bad_table VALUES
(1,'a,b,c'),
(2,'c,f'),
(3,'s,d,f,g'),
(4,'p'),
(5,'k,h,s');

SELECT * FROM my_bad_table;
+----+---------+
| id | column1 |
+----+---------+
|  1 | a,b,c   |
|  2 | c,f     |
|  3 | s,d,f,g |
|  4 | p       |
|  5 | k,h,s   |
+----+---------+

SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+

CREATE TABLE my_good_table AS
SELECT DISTINCT id
              , SUBSTRING_INDEX(SUBSTRING_INDEX(column1,',',i+1),',',-1) x 
           FROM my_bad_table
              , ints 
          ORDER 
             BY id
              , x;

ALTER TABLE my_good_table ADD PRIMARY KEY(id,x);

SELECT * FROM my_good_table;
+----+---+
| id | x |
+----+---+
|  1 | a |
|  1 | b |
|  1 | c |
|  2 | c |
|  2 | f |
|  3 | d |
|  3 | f |
|  3 | g |
|  3 | s |
|  4 | p |
|  5 | h |
|  5 | k |
|  5 | s |
+----+---+