【问题标题】:split a field having comma separated values and update the same field by adding additional rows with separated values拆分具有逗号分隔值的字段并通过添加具有分隔值的其他行来更新同一字段
【发布时间】:2017-08-01 16:32:33
【问题描述】:

我有一个逗号分隔值的字段。我想拆分该字段并将获得的值(拆分后)添加到同一个表中。

例如:

**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

有没有一种方法可以在不使用临时表的情况下做到这一点,因为这里的 Customer 是一个级联实体。这个 Id 是由其他一些表形成的,它是一个自动增量键。

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

【问题讨论】:

  • 我们敢问为什么你有一个逗号分隔值的表吗? :-(
  • 数据迁移!!!:>
  • 好的。并且只是为了确认 - 源的 id 和目标的 id 不需要彼此没有关系?
  • No..这是一个自增键...这里源表和目标表是一样的
  • 好的。我仍然不明白为什么“使用临时表”与“级联实体”冲突

标签: mysql


【解决方案1】:

这是使用整数表 (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          |
+----+------------+-------------+

【讨论】:

  • 好一个..但我想更新并插入同一个表中..有没有可能这样做?
  • 否(或不容易)。但显然您可以删除旧表并重命名新表。
  • 该表是活动的(生产中)!!!..我无法删除它..或者如果有其他解决方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多