mysql 连表分组 多个字段用逗号隔开
例
SELECT *, GROUP_CONCAT(plate_tag.plate_id) FROM `tag` left join plate_tag ON plate_tag.tag_id = tag.id WHERE `tag`.`deleted_at` IS NULL AND `plate_tag`.`deleted_at` IS NULL GROUP BY tag.id;
更多
(转自:https://blog.csdn.net/liangfeng366/article/details/84092275,仅做个人备份,浏览请看原文)
GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,并把查询的字段逗号分隔开,只支持字符类型的字段,整数型须要特殊写法。
下面是一些使用注意事项:
1.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]
2.长度陷阱
用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的配置节。
到my.cnf的mysqld节点下加上group_concat_max_len =99999……
重启mysql。
上一篇: Java基础--流程控制