在我的工作中,接到过这么一个需求,需要合并纵向的数据为 1 条记录显示出来。
业务场景
用业务上的说法,我这里有 1 个物料,其中有 n 个属性,每个属性配置有是否显示的开关,对于这个物料的 n 个属性,就是 n 条记录存储在这个表中;现在就需要对这个表按物料编码分组,分组后的数据,提取出物料的属性和配置,作为单条记录显示,画一个大概的示意图
这需求的理由是大量的数据拉出来后,上方的模式阅读数据会非常的不直观
这种转化的操作,我们可以使用 java 来处理,拉取到全部的数据后,再根据物料编码进行分组后合并数据即可;但,这次我选择在 mysql 中处理好,直接拿到需要的数据
业务中用到的技能
- 左连接获取到其余表中的数据
case
将状态数据转化为文本描述,类似于1 -> 启用, 0 -> 禁用
- 表多层嵌套查询
- 表数据分组查询 +
group_concat
连接目标字段合并到 1 条记录中 substring_index
,根据分隔符截取字符串replace
替换字符串数据
从内往外开始查询处理为临时表
联表查询准备基本数据
在这一步