MySQL如何按父ID分组拼接同表其他记录的ATTRIBUTE字段值到SIMPLE类型记录
MySQL需求实现方案
1. 仅查询输出预期结果(不修改原表数据)
用GROUP_CONCAT实现分组拼接,结合CASE判断类型返回对应属性值:
SELECT `UNIQUE ID`, `TYPE`, `Parent ID`, CASE WHEN `TYPE` = 'SIMPLE' THEN ( SELECT GROUP_CONCAT(Attribute SEPARATOR ', ') FROM 你的表名 t2 WHERE t2.`Parent ID` = t1.`UNIQUE ID` AND t2.TYPE = 'VARIANT' ) ELSE Attribute END AS Attribute FROM 你的表名 t1;
2. 直接更新原表写入拼接结果
如果需要永久修改原表中TYPE='SIMPLE'记录的Attribute字段值,用以下更新语句:
-- 拼接内容较长的话先执行这行调整GROUP_CONCAT最大长度,单位字节,数值按需修改 -- SET group_concat_max_len = 102400; UPDATE 你的表名 t_simple INNER JOIN ( SELECT `Parent ID`, GROUP_CONCAT(Attribute SEPARATOR ', ') AS attr_list FROM 你的表名 WHERE TYPE = 'VARIANT' GROUP BY `Parent ID` ) t_variant ON t_simple.`UNIQUE ID` = t_variant.`Parent ID` SET t_simple.Attribute = t_variant.attr_list WHERE t_simple.TYPE = 'SIMPLE';
注意:执行更新前请先备份数据,或先运行查询语句验证结果符合预期后再操作,所有
你的表名替换为实际业务表的名称即可。
内容的提问来源于stack exchange,提问作者Lance
相关产品推荐
相关产品推荐

