mysql中一对多数据查询问题

  现在有两个表,一个表为goods表,一个表为goods_image表

  goods表中存放货物的基本信息,goods_image中存放货物的图片,两个表通过good_id连接,基本结构如下:

 


首先查找的时候我先想到基本的关联查询:

select goods.*,goods_image.goods_path from goods,goods_image  where goods.goods_id = goods_image.goods_id


结果就是这样,数据重复,这样用json不好传递,所以我们需要对sql进行优化

然后我就想到了group by 分组语句

select goods.*,goods_image.goods_path from goods,goods_image  where goods.goods_id = goods_image.goods_idgroup by goods.goods_id



这样之后数据却变少了,比如说一个手机有多张图片,但是这样查询就只有第一张图片,

继续改进sql

经过一番百度,查到了sql中的group_concat()方法,将多行的数据整合到一行上,

最终sql:

select goods.*,group_concat(goods_image.goods_path) from goods,goods_image  where goods.goods_id = goods_image.goods_id group by goods_id

结果:


这样就得到了所有的数据并且不重复


作为一个小白,sql中真的有好多东西需要我们去学习...



  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值