我在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。
答案 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 |
+----+---+