当前位置: 首页 > article >正文

MySQL GROUP_CONCAT函数踩坑小记

1.1 长度限制

GROUP_CONCAT 有长度限制,默认1024,如果你尝试连接的字符串超过这个长度,结果就会被截断。

show VARIABLES Like 'group_concat_max_len';

可以通过以下方式修改这个配置:

SET SESSION group_concat_max_len = 10000;

SET GLOBAL group_concat_max_len = 10000;

或者修改 MySQL 的配置文件:

group_concat_max_len = 10000

或者修改数据库连接:

sessionVariables=group_concat_max_len=10000
1.2 无中生有
select
	blc.id as balanceId,
	GROUP_CONCAT(distinct rel.fund_code) fundCodes
from
	t_balance_margin blc
inner join t_balance_fund_relation rel on
	rel.is_delete = 0
	and rel.balance_id = blc.id
	and rel.balance_type = 3
where
	blc.id = 0

以上 SQL,由于 bic.id 是不可能等于0的,所以结果集中应该没有数据。但是,当你使用 GROUP BY 语句时,MySQL 会为每个组返回一行。如果没有匹配的行,MySQL 仍然会返回一行,但所有的列都会是 NULL。

所以本次查询的结果如下:

balanceIdfundCodes
NULLNULL

显然这会导致最终的结果集中出现一个所有字段都 NULL 的元素,造成可能的 NPE。

解决办法:在查询的最后添加一个HAVING子句,检查某个非NULL的列。

select
	blc.id as balanceId,
	GROUP_CONCAT(distinct rel.fund_code) fundCodes
from
	t_balance_margin blc
inner join t_balance_fund_relation rel on
	rel.is_delete = 0
	and rel.balance_id = blc.id
	and rel.balance_type = 3
where
	blc.id = 0
having blc.id is not null

http://www.kler.cn/news/341494.html

相关文章:

  • 领域驱动设计DDD的工作机制
  • 基于ZABBIX监控 RabbitMQ服务开箱模板汉化及适用性改造
  • 相亲交友系统的商业模式探讨
  • Android Studio Koala Feature Drop 稳定版现已推出
  • 在滴滴和字节划水6年,过于真实了。。。
  • 刷题小计六:矩阵
  • 【fastjson】json对象格式化打印
  • 2015年国赛高教杯数学建模C题月上柳梢头解题全过程文档及程序
  • 无人自助超市系统小程序源码开发
  • 谈谈bluestore与rocksdbstore(未完,待续)
  • 什么是网络信息安全?
  • 考研笔试/上机经典编程题集合(持续更新并完善解题思路)
  • 2024 kali虚拟机安装教程,分两大步骤,图文讲解(1)
  • 云原生日志ELK( logstash安装部署)
  • ABB机器人20195故障报警原因分析
  • 【基础介绍】【OCR】
  • 【微服务】链路追踪 - Micrometer(day9)
  • IT招聘乱象的全面分析
  • 13种pod的状态
  • NL2SQL之DB-GPT-Hub详解篇:text2sql任务的微调框架和基准对比