前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql一对多查询合并多的一方的数据。

mysql一对多查询合并多的一方的数据。

作者头像
Mshu
发布2018-10-31 10:40:07
4K0
发布2018-10-31 10:40:07
举报
文章被收录于专栏:咸鱼不闲咸鱼不闲

有时候会有这样一个需求, 查询的一条记录需要包含另一个表的多条记录,并且让多条记录成为一个字段组成最终的一条记录。比较难描述,看例子吧。

创建一个产品表:

代码语言:javascript
复制
   create table product(
    proId int(10),
    proName varchar(50)
   )

创建一个成分表:

代码语言:javascript
复制
  create table componen(
  comId int (10),
  proId int(10),
  comName varchar(50)
  )

案例需求:如果一个产品有多个成分,也就是一个产品表对应多个成分表,我想查出的结果,一条记录包含产品 proId, ProName, ComName,的字段。

思路:

  1. 先写出不含成分表的查询语句,
  2. 然后将一个产品对应的多个成分合并成一个字段,
  3. 将合成的字段插入到一个语句中。

实践:

代码语言:javascript
复制
 1. select p.proId , p.proName from product p;
 2. SELECT group_concat( c.comName ) FROM componen WHERE componen.proId= 1
 3. SELECT
        p.proId AS "产品id", 
        p.proName AS "产品名称",     
        (SELECT group_concat( c.comName ) FROM componen WHERE componen.proId
        = p.proId)AS "成分" 
     FROM
     product p;

*注意:第2步骤的语句和第三部引用第二部的语句有差别,那部分很重要的! *如果要对合并的一方去重:嵌套DISTINCT即可

代码语言:javascript
复制
(SELECT group_concat( DISTINCT(c.comName) ) FROM componen WHERE componen.proId= p.proId)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档