背景
今天要在负责维护的内部系统中做一次数据迁移(心跳加速),表结构不变,而是改变一些字段的存取方式。第一次用到了MySQL里的GROUP_CONCAT()
函数,在这里记录一下。
准备测试表&数据
下面是简单的测试用表:
1 | CREATE TABLE `tab_test` ( |
准备测试数据:
1 | INSERT INTO `tab_test` VALUES(1,1,'v1',"Joe","Tag1"); |
具体的需求就是按pid
分组且按id
增序,把每组的str_1
和str_2
合并到该组第一条记录的str_1
中,值得注意的是,version
不同的记录不能合并到一起。
刚开始还在考虑是不是需要写py脚本来操作,不过还好有GROUP_CONCAT()
,现在只要写SQL就足够了。
用法示例
来看看GROUP_CONCAT()
的用法和示例:
1 | GROUP_CONCAT([DISTINCT] expr [,expr ...] |
两种用法都可以:
1 | SELECT student_name, |
撸起袖子就是干
依葫芦画瓢先试试效果:
1 | SELECT `id`,GROUP_CONCAT( |
输出结果也很棒棒,合乎预期,按pid
和version
分组然后拼接str_1
到每组第一条记录:
1 | +----+--------------+ |
继续拼装:
1 | UPDATE `tab_test` t1,( |
更新后的表:
1 | +----+-----+---------+----------------------+-------+ |
那么剩下的就是单纯的删除工作了。