我想只将特定行从一个表复制到另一个表。到目前为止一切顺利:
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 - 黄色
感谢您的帮助!
答案 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;
这将产生每行上具有单独颜色的输出行。