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

时间:2014-07-03 15:59:21

标签: 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 -Color

1 - 001 - 黑色

1 - 001 - 蓝色

1 - 001 - 黄色

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

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

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;

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