拆分具有逗号分隔值的字段,并通过添加具有分隔值的其他行来更新相同的字段

时间:2017-08-01 16:32:33

标签: mysql

我有一个逗号分隔值的字段。我想拆分字段并在同一个表中添加带有获得值的行(分割后)。

例如:

**Data as in db**
ID   CustomerId   Preferences
------------------------------

 1.   4456823          AA,BB,DD
 2.   4456824          BB,DD
**Data format required**

ID   CustomerId   Preferences
------------------------------
1.    4456823          AA
2.    4456823          BB
3.    4456823          DD
4.    4456824          BB
5.    4456824          DD

有没有办法可以在不使用临时表的情况下执行此操作,因为此处的客户是级联实体。此ID由其他表格组成,这是一个自动增量键。< / p>

基本上我想更新第一个字段并插入其他分割值以获得上面显示的所需结果

1 个答案:

答案 0 :(得分:0)

这是一种使用整数表(0-9)的方法:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL
,customerid INT NOT NULL
,preferences VARCHAR(100) NOT NULL
);

INSERT INTO my_table VALUES
(1,4456823,'AA,BB,DD'),
(2,4456824,'BB,DD');

DROP TABLE IF EXISTS my_new_table;

CREATE TABLE my_new_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,customerid INT NOT NULL,preferences CHAR(2) NOT NULL);

INSERT INTO my_new_table (customerid,preferences) 
SELECT DISTINCT customerid, SUBSTRING_INDEX(SUBSTRING_INDEX(preferences,',',i+1),',',-1) x FROM my_table, ints ORDER BY customerid,x;

SELECT * FROM my_new_table;
+----+------------+-------------+
| id | customerid | preferences |
+----+------------+-------------+
|  1 |    4456823 | AA          |
|  2 |    4456823 | BB          |
|  3 |    4456823 | DD          |
|  4 |    4456824 | BB          |
|  5 |    4456824 | DD          |
+----+------------+-------------+