现在有三个表,结构如下:

  1. cate
  2. CREATE TABLE `cate` (
  3. `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  4. `name` char(20) DEFAULT '' COMMENT '分类名',
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='文章分类表';
  7.  
  8. article
  9. CREATE TABLE `article` (
  10. `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  11. `title` varchar(50) DEFAULT '',
  12. `cate_id` int(11) NOT NULL DEFAULT '0' COMMENT '分类id',
  13. PRIMARY KEY (`id`)
  14. ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='文章表';
  15.  
  16. article_extend
  17. CREATE TABLE `article_extend` (
  18. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  19. `article_id` int(10) unsigned DEFAULT '0' COMMENT '文章id',
  20. `name` varchar(255) DEFAULT '' COMMENT '音频,图片之类',
  21. PRIMARY KEY (`id`)
  22. ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='附件表';
三张表数据如下:
cate表:

article表:

article_extend表:

问题来了,现在通过表连接查询,查询文章id为1的文章数据,并显示文章标题,文章分类,文章name。
  1. SELECT
  2. a.id AS aid,
  3. a.title AS atitle,
  4. c. NAME AS cname,
  5. ae. NAME AS aname
  6. FROM
  7. article AS a
  8. LEFT JOIN cate AS c ON a.cate_id = c.id
  9. LEFT JOIN article_extend AS ae ON a.id = ae.article_id
  10. WHERE
  11. a.id = 1;

结果如下,出现了两条数据:

现在只想要一条结果,aname字段进行合并,如何做?

只有通过GROUP_CONCAT来实现了:
  1. SELECT
  2. a.id AS aid,
  3. a.title AS atitle,
  4. c. NAME AS cname,
  5. GROUP_CONCAT(ae. NAME SEPARATOR '-') AS aname
  6. FROM
  7. article AS a
  8. LEFT JOIN cate AS c ON a.cate_id = c.id
  9. LEFT JOIN article_extend AS ae ON a.id = ae.article_id
  10. WHERE
  11. a.id = 1;
结果如下:
那么,现在我们不想通过文章id一条一条的查,我们要取全部,但如果文章name有多个的要进行合并,如何做?
  1. SELECT
  2. a.id AS aid,
  3. a.title AS atitle,
  4. c. NAME AS cname,
  5. ae.allname
  6. FROM
  7. article AS a
  8. LEFT JOIN (
  9. SELECT
  10. ae.article_id,
  11. GROUP_CONCAT(ae. NAME) AS allname
  12. FROM
  13. article_extend AS ae
  14. GROUP BY
  15. ae.article_id
  16. ) AS ae ON a.id = ae.article_id
  17. LEFT JOIN cate AS c ON a.cate_id = c.id;

结果如下:

mysql中GROUP_CONCAT的使用的更多相关文章

  1. MySQL中group_concat函数-和group by配合使用

    MySQL中group_concat函数 完整的语法如下: group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔 ...

  2. MySQL中group_concat函数深入理解

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . 一.MySQL中group_concat函数 完整的语法如下: gr ...

  3. MySQL中group_concat函数

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) .MySQL中group_concat函数完整的语法如下:group_c ...

  4. MySQL中group_concat函数 --- 很有用的一个用来查询出所有group by 分组后所有 同组内的 内容

    本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) . MySQL中group_concat函数 完整的语法如下: grou ...

  5. mysql中group_concat函数用法

    该函数返回带有来自一个组的连接的非NULL值的字符串结果.该函数是一个增强的Sybase SQL Anywhere支持的基本LIST()函数. 语法结构: GROUP_CONCAT([DISTINCT ...

  6. MYSQL中group_concat有长度限制!默认1024

    在mysql中,有个函数叫"group_concat",平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是10 ...

  7. Sybase数据库实现等效的mysql中group_concat功能

    在MySQL中,如果想实现将分组之后的多个数据合并到一列,可以使用group_concat函数,如下图所示: 但是,在Sybase中没有这样的函数(别问我为什么使用Sybase,因为公司用的Sybas ...

  8. MYSQL中group_concat有长度限制!默认1024(转载)

    在mysql中,有个函数叫“group_concat”,平常使用可能发现不了问题,在处理大数据的时候,会发现内容被截取了,其实MYSQL内部对这个是有设置的,默认不设置的长度是1024,如果我们需要更 ...

  9. MYSQL中group_concat( )函数中参数的排序方法

    使用mysql中的group_concat( )函数连接指定字段时,可以先对该字段进行排序. PS:是因为二刷mysql的51道题的第12题遇到的:查询和" 01 "号同学学习的课 ...

  10. mysql中 group_concat长度限制

    //这个函数有长度限制,上了多次当.默认长度1024长度. select group_concat(id) from table; 要彻底修改,在MySQL配置文件(my.ini)中加上 group_ ...

随机推荐

  1. javascript通过改变滚动条滚动来显示某些元素的scrollIntoView()方法

    scrollIntoView(b)可以在任何HTML上调用,通过滚动滚动条,调用的元素就可以出现在可视区域. 参数如果是true,或者不传参数,则表示调用元素的顶部与浏览器顶部平齐. 如果传入fals ...

  2. java的super和this关键字用法总结

    ------super关键字------                 super用途:在子类中访问超类“被隐藏的成员变量(无论是否静态)和静态方法”以及“被重写的实例方法”.这里的超类必须是“直接 ...

  3. redis windows dll 下载

    https://pecl.php.net/package/redis http://blog.csdn.net/leesin2011/article/details/72801629 http://w ...

  4. HTML|CSS之前端入门

    知识内容: 1.计算机网络综述 2.web基础 3.HTML与CSS介绍 4.JavaScript与jQuery介绍 一.计算机网络综述 1.什么是计算机网络 计算机网络是指将地理位置不同.具有独立功 ...

  5. vb 水晶报表打印

    vb里面的水晶报表打印控件:CrystalReportViewer 用到的dll文件: 水晶报表打印其实很简单,只要创建报表对象,再对其传递数据就可以打印出来.当然所传递的数据要与水晶报表设计里面的数 ...

  6. Java并发编程学习路线(转)

    以前特地学过并发编程,但是没怎么学进去,不太喜欢.最近发现,作为一个资深工程师,却没有完整深入系统的学习过,而反是现在的BAT大并发是必须的,感觉甚是惭愧. 故找了一片学习文章,如下,准备集中一段时间 ...

  7. 二维数组 cudaMallocPitch() 和三维数组 cudaMalloc3D() 的使用

    ▶ 使用函数 cudaMallocPitch() 和配套的函数 cudaMemcpy2D() 来使用二维数组.C 中二维数组内存分配是转化为一维数组,连贯紧凑,每次访问数组中的元素都必须从数组首元素开 ...

  8. Git 代码版本还原方法

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Git 代码版本还原方法 在使用 Git 管理自己的代码和资料时,难免会遇到意料 ...

  9. 9. PD逆向工程--由数据库转为模型(ER图)

    步骤: 1. 在控制面板-->管理工具(如果没找到管理工具,查看方式改为大图标)-->数据源(ODBC)-->用户DSN -->用户数据源下添加一个数据源(这里根据情况添加数据 ...

  10. leetcode166

    public class Solution { public String fractionToDecimal(int numerator, int denominator) { HashMap< ...