mysql - 仅将特定行从一个表复制到另一个表,并为每行信息创建一个新行

标签 mysql sql

我只想将特定行从一个表复制到另一个表。到目前为止一切顺利:

CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM HDG.HDG_FINAL_TABLE WHERE HDG.HDG_FINAL_TABLE.FARBFAMILIE LIKE "%,%";
UPDATE tmptable_1 SET primarykey = NULL;
INSERT INTO HDG.HDG_FINAL_TABLE_2 SELECT * FROM tmptable_1;
DROP TEMPORARY TABLE IF EXISTS tmptable_1;

我的问题是“FARBFAMILIE”列有三个不同的值,例如“黑色、蓝色、黄色”。我想复制“FARBFAMILIE”列包含“,”的每一行,并复制该行,因为该列包含由“,”分隔的不同信息。

原始行:

第 0 列 - 第 1 列 - 第 2 列

组 - SKU - 颜色

1 - 001 - 黑色、蓝色、黄色

目标:

第 0 列 - 第 1 列 - 第 2 列

组 - SKU -颜色

1 - 001 - 黑色

1 - 001 - 蓝色

1 - 001 - 黄色

感谢您的帮助!

最佳答案

听起来你想做一件崇高的事情,通过摆脱逗号分隔的列。这并不容易,但你可以做到。首先,您需要知道列中值的最大数量:

select 1 + max(length(FARBFAMILIE) - length(replace(FARBFAMILIE), ',', ''))
from HDG.HDG_FINAL_TABLE;

注意这里计算元素的技巧。获取值的长度并减去不带逗号的长度。

然后,您可以获得所需的行:

select `group`, sku,
       substring_index(substring_index(color, ',', n.n), ',', -1) as color
from HDG.HDG_FINAL_TABLE join
     (select 1 as n union all select 2 union all select 3 . . .
     ) n
     on length(FARBFAMILIE) - length(replace(FARBFAMILIE), ',', '') <= n.n;

这将生成每行具有单独颜色的输出行。

关于mysql - 仅将特定行从一个表复制到另一个表,并为每行信息创建一个新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558452/

相关文章:

sql - 检查子查询中是否存在记录

C++ HTTP : Filter Response Header

java - Hibernate Query 中 mysql RLIKE 运算符的等效项是什么?

java - 通过数据库或算法比较不同日期的两个对象

php - 计算列中的 'most selected value'

java - mysql 中的下拉列表和单选按钮使用什么数据类型

sql - 在查询中使用 CTE(公用表表达式)

SQL 查询每隔几天就会变慢

sql - 根据重复项的数量选择行,按字母顺序排列

php - MySQL 查询返回奇怪的值