Mysql合并某一个字段,解决商品属性查询问题

本文介绍如何使用FIND_IN_SET函数实现表关联,并利用GROUP_CONCAT函数合并字段值,解决了多表联查及数据整合的问题。

      今天接到一个需求,需要导出商品到excel,首先就是需要查询已经已上架的商品,这个跟提供给前端的查询接口还不太一样,因为是给管理人员使用的,所以商品信息比较全面,6表联查,这不是关键,关键是遇到一个问题,请让我细细道来。

       其中第一个问题,请看下边两张我简化后的表

          


我需要将这两张表关联起来,只要sku在skuIds中存在就可以关联,问了几个人,都跟我说是通过“,”拆分什么的,感觉好麻烦,后来看见一篇帖子,忽然发现这个好简单,十分感谢那位热心博主,下边贴出sql

SELECT
p.*, s.`value`
FROM
product p,
spec s
WHERE
FIND_IN_SET(p.sku, s.skuIds)

ORDER BY

p.sku

用了一个函数 FIND_IN_SET(str,strlist),其中str也可以写成入参,也可以直接用整个字段,strlist就是你需要满足的条件,只要你传进来的值在strlist中有,就满足条件,很是方便,查询完自后是这样的结果

  

    

如图所示,其实方框中是一件商品,我想把value合并,我去百度了下,找到一个合并字段的函数,GROUP_CONCAT(expr),然后用上了,sql如下:

SELECT
p.*, GROUP_CONCAT(s.`value`) `value`
FROM
product p,
spec s
WHERE
FIND_IN_SET(p.sku, s.skuIds)


GROUP BY 
p.sku
ORDER BY 
p.sku




完美解决!


### MySQL CONCAT 函数使用示例 在MySQL中,`CONCAT()`函数用于将两个或更多的字符串值连接一个单一的字符串。此功能对于将来自不同列的数据合并为一列非常有用。 当处理包含多个字段并希望将其合并在同一行显示时,可以采用 `CONCAT()` 或者更灵活的 `GROUP_CONCAT()` 来实现这一目标[^4]。 #### 基础用法 假设有一个表名为 `attributes` 的表格,其中含有三列表示属性名称 (`attr_name`)、属性值(`attr_value`) 产品ID (`product_id`)。为了展示如何把 `attr_name` `attr_value` 合并在一起: ```sql SELECT product_id, CONCAT(attr_name, ':', attr_value) AS attribute_info FROM attributes; ``` 上述命令会创建一个新的临时列叫做 `attribute_info` ,它由 `attr_name` 加上冒号再加上 `attr_value` 组成[^3]。 如果想要进一步增强灵活性,在不同的部分之间加入特定分隔符,则可利用带有分隔符参数的形式调用 `CONCAT_WS(separator, str1, str2,...)` 方法代替普通的 `CONCAT()` : ```sql SELECT product_id, CONCAT_WS(' -> ', attr_name, attr_value) as detailed_attribute FROM attributes; ``` 这段代码将会以箭头作为分隔符来链接各个组件。 #### 复杂场景下的应用 考虑到实际应用场景可能更加复杂,例如存在NULL值的情况,这时可以通过IFNULL()或其他方式确保即使某些列为null也能正常工作: ```sql SELECT product_id, CONCAT(IFNULL(attr_name,'No Name'), ' : ', IFNULL(attr_value,'No Value')) AS safe_attribute_info FROM attributes; ``` 这里展示了怎样安全地处理可能出现的 NULL 数据项,从而避免最终输出结果里出现不必要的 "NULL" 字样[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值