有两个表进行联合查询,以其中一个表的字段 LEFT JOIN 或者 INNER JOIN 联合查询。例如 SELECT *  as name FROM  source mm LEFT JOIN ke  ss ON mm.id=ss.tid 来查询,如果两个表有重复数据,这个时候,我们借助,一个mysql函数来实现

首先我们要注意一点

就是 group_concat(distinct ss.cname SEPARATOR ',') 是数据以“,”链接起来 其中“,”可以用其他符号代替group_concat(distinct ss.cname SEPARATOR ',') as name   放入name这个字段

我们就可以直接调用name 的值了,一般group_concat 是和 group by name一起使用的。

语法:

GROUP_CONCAT([DISTINCT] expr [,expr ...]

[ORDER BY {unsigned_integer | col_name | expr}

[ASC | DESC] [,col_name ...]]

[SEPARATOR str_val])

1.例如:SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;

------------ ---------

| student_id | courses |

------------ ---------

| 2 | 3,4,5 |

------------ ---------

这 就不需要用php循环了

$row = $pdo->query("SELECT student_id, GROUP_CONCAT(courses_id) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id");

$result = explode(',', $row['courses']);

2.当然分隔符还可以自定义,默认是以“,”作为分隔符,若要改为“|||”,则使用SEPARATOR来指定,例如:

SELECT student_id, GROUP_CONCAT(courses_id SEPARATOR '|||') AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;

------------ ---------

| student_id | courses |

------------ ---------

| 2 | 3|||4|||5 |

------------ ---------

3.除此之外,还可以对这个组的值来进行排序再连接成字符串,例如按courses_id降序来排:

SELECT student_id, GROUP_CONCAT(courses_id ORDER BY courses_id DESC) AS courses FROM student_courses WHERE student_id=2 GROUP BY student_id;

------------ ---------

| student_id | courses |

------------ ---------

| 2 | 5,4,3 |

------------ ---------

4.需要注意的:

a.int字段的连接陷阱

当你用group_concat的时候请注意,连接起来的字段如果是int型,一定要转换成char再拼起来,

否则在你执行后(ExecuteScalar或者其它任何执行SQL返回结果的方法)返回的将不是一个逗号隔开的串,

而是byte[]。

该问题当你在SQLyog等一些工具中是体现不出来的,所以很难发现。

select group_concat(ipaddress) from t_ip 返回逗号隔开的串

select group_concat(id) from t_ip 返回byte[]

select group_concat(CAST(id as char)) from t_dep 返回逗号隔开的串

select group_concat(Convert(id , char)) from t_dep 返回逗号隔开的串

附Cast,convert的用法:

CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name)

CAST() 和CONVERT() 函数可用来获取一个类型的值,并产生另一个类型的值。

这个类型 可以是以下值其中的 一个:

BINARY[(N)]

CHAR[(N)]

DATE

DATETIME

DECIMAL

SIGNED [INTEGER]

TIME

UNSIGNED [INTEGER]

b.长度陷阱

用了group_concat后,select里如果使用了limit是不起作用的.

用group_concat连接字段的时候是有长度限制的,并不是有多少连多少。但你可以设置一下。

使用group_concat_max_len系统变量,你可以设置允许的最大长度。

程序中进行这项操作的语法如下,其中 val 是一个无符号整数:

SET [SESSION | GLOBAL] group_concat_max_len = val;

若已经设置了最大长度, 则结果被截至这个最大长度。

在SQLyog中执行 SET GLOBAL group_concat_max_len = 10 后,重新打开SQLyog,设置就会生效。

mysql 联合查询去重复_两个表联合查询去重复GROUP_CONCAT相关推荐

  1. Mysql求两个表(查询结果)的差集

    Mysql求两个表(查询结果)的差集 两个查询结果的差集,mysql直接提供了关键字not in,而且我们也一般先会想到这个查询方式.但是在数据量多的情况之下,效率会很低,这是必须使用左链接的方式求查 ...

  2. 动人的牵线美的连接符-两张表的查询(一)

            牵线,想起过去不久的七夕,喜鹊为牛郎织女搭起约会的鹊桥,看是多美丽的天衣无缝的相逢.         最近在做高校云4.0项目,从考评跑到UI,成功地被调到成绩系统.说实话对成绩系统的 ...

  3. 如何两张表关联查询?

    如何两张表关联查询select * from table1 a,table2 b where a.id = b.lid === select a.anme, b.bname, c.value from ...

  4. sql怎么两个表关联查询

    在 SQL 中,我们可以使用 JOIN 关键字来两个表关联查询.例如,假设有两个表:table1 和 table2,并且它们之间有一个关联字段 field1.你可以使用如下的语句来两个表关联查询: S ...

  5. mysql 两张表合并查询_中级数据分析-多表查询

    表的加法 表的联结 联结应用案例 case应用案例 一.表的加法 加法:union 表的加法是把两个表的数据,按行合并在一起. 表的加法,会把两个表里重复的数据删除,只保留一个. 如果想保留重复数据, ...

  6. mysql两个查询结果差集_【Mysql】求两个表(查询结果)的差集

    求两个查询结果的差集,Mysql直接提供了关键字not in,但是not in的效率极其低下,出现例如求一个上千查询结果在上万查询结果的差集,那么使用not in来查询的查询速度极其缓慢,这是必须使用 ...

  7. mysql连表查询最大值_SQL 两个表联合查询记录中取最大值

    表1OnDateITEM_IDMZZYHNRUL2012-12-2517:20:00151.22012-12-2515:00:20251.32012-12-2516:00:00351.42012-12 ...

  8. mysql不同服务器数据库查询_不同服务器不同数据库两张表连接查询使用经验

    使用SQL语句连接查询位于两个不同的服务器不同的数据库中的两张表,最初将SQL语句写成以下形式select*fromProduct pinnerjoin opendatasource('SQLOLED ...

  9. mysql 查询结果横向拼接_两个SQL查询,横向合并为一个查询结果

    第一条sql: select unit,count(*)as number from archives_management group by unit 第二条sql: select fine_uni ...

  10. mysql中多表联合查询语句_mysql中的多表联合查询语句是什么

    mysql中的多表联合查询语句是:[select 语句1 union [union 选项] select 语句2 union [union 选项] select 语句n].多表联合查询结果是将多个se ...

最新文章

  1. 【系统分析与设计】软件开发模式之敏捷开发(Scrum)分析
  2. powerbuilder 保存图表图像_数据可视化/统计图表循序渐进指南
  3. 《I'm a Mac:雄狮训练手册》——1.12 开机快捷键
  4. PHP中使用redis 执行lua脚本
  5. 闭包案例产生多个相同的随机数 沙箱
  6. 牛客网【每日一题】5月22日 [CQOI2009]中位数图
  7. 使用setuptools和cython打包python程序的时候遇到:Microsoft visual c++ 14.0 is required问题解决办法
  8. .gitignore和“以下未跟踪的工作树文件将被签出覆盖”
  9. pcm5102a解码芯片音质评测_简单测评200元档可能是唯一搭载高通QCC3020芯片的真无线蓝牙耳机...
  10. UAC1.0和UAC2.0区别(八)
  11. [MySql] - 数据库备份还原
  12. 怎样用DNSPod做负载均衡?
  13. 如何使用C#进行Visio二次开发
  14. mysql 测试数据生成器_ApexSQL Generate(SQL测试数据生成器)
  15. c语言编写算术编码,编程实现算术编码算法.doc
  16. P13~P14 谋定而后动,知止而有得
  17. 物体识别桌 开发系列之一
  18. 编译Android下可用的全平台FFmpeg(包含libx264与libfdk-aac)
  19. 网站url生成二维码
  20. 最新特效移动文字代码大全

热门文章

  1. JAVA-初步认识-常用对象API(String类-常见功能-比较)
  2. 新建samba配置步骤
  3. ZOJ 3432 Find the Lost Sock (水题)
  4. Activity保存状态saving activity state和onPause()
  5. JAVA程序设计 实验一报告
  6. 基于visual Studio2013解决C语言竞赛题之0405阶乘求和
  7. 细说文件读写操作(读写锁)
  8. 把CAS部署远程服务器上,在本地client访问CAS会出现无法统一注销的问题
  9. mysql大数据量的分页查询优化
  10. Http和Https网络同步请求httpclient和异步请求async-http-client