MySQL查询把多列返回结果集拼装成一个字段

使用场景

mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生女生姓名,通过关联查询肯定是无法实现的.

解决方式

1首先我们了解上述相关使用场景之后,结合相关如下相关示例

单个列表中,需要显示不同快递公司的配送区域,相关表中存储是的对应的地区id字段
2主表中记录相关业务数据,然后关联相地址表处理结果集,就可以得到我们需要的结果
原数据
这是原数据
最终需要的数据
这是我们要显示的最终数据
执行的SQL如下

    SELECT 
    template.templete_id, template.is_transport, template.is_take_order, template.is_stop,
   	GROUP_CONCAT(region.region_name) province, template.first_heavy_price, 
   	template.first_heavy_cost, template.first_heavy_weight, 
   	template.continued_heavy_base, template.continued_heavy_price, 
   	template.continued_heavy_cost, template.weight_unit 
    FROM kd_up_freight_template template LEFT JOIN kd_up_express up
    ON template.up_express_id = up.up_express_id
    LEFT JOIN kd_region region ON FIND_IN_SET(region.region_id, template.province) 
    WHERE template.isdel = 0 
    GROUP BY template.templete_id

实现思路

可能业务场景不太一样,最终的处理方式也不一样
上面的SQL主要是通过主表中的地址ID集合关联地址表
关联方式通过FIND_IN_SET()函数处理
然后通过主表的ID进行分组
处理返回数据中通过GROUP_CONCAT()函数进行地址名称处理

FIND_IN_SET()
功能:FIND_IN_SET函数是IN函数的升级版.功能类似.区别在于:如果是常量,则可以直接用IN, 否则要用FIND_IN_SET()函数
语法:MySQL中原型为:FIND_IN_SET(str,strlist)。 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间.
我们通过这个函数使主表和地址表关联起来

GROUP_CONCAT()
功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
这里我们直接不用做任何处理,直接连接地址名称就可以了

发布了6 篇原创文章 · 获赞 6 · 访问量 7768

猜你喜欢

转载自blog.csdn.net/YaoWu_Zhou/article/details/105068560