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

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 无中生有
selectblc.id as balanceId,GROUP_CONCAT(distinct rel.fund_code) fundCodes
fromt_balance_margin blc
inner join t_balance_fund_relation rel onrel.is_delete = 0and rel.balance_id = blc.idand rel.balance_type = 3
whereblc.id = 0

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

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

balanceIdfundCodes
NULLNULL

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

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

selectblc.id as balanceId,GROUP_CONCAT(distinct rel.fund_code) fundCodes
fromt_balance_margin blc
inner join t_balance_fund_relation rel onrel.is_delete = 0and rel.balance_id = blc.idand rel.balance_type = 3
whereblc.id = 0
having blc.id is not null

http://www.mrgr.cn/news/43936.html

相关文章:

  • 微知-梅林系统设置无线桥接模式后如何登录梅林路由器?
  • 在职场上,态度永远比能力更重要
  • 前端工程化
  • Coze:如何用自然语言优化聊天机器人的输出结果?
  • 【C语言】VS调试技巧
  • 服务器虚拟化
  • 物理学基础精解【55】
  • 打卡第四天 P1081 [NOIP2012 提高组] 开车旅行
  • CSS伪类
  • 文心一言 VS 讯飞星火 VS chatgpt (363)-- 算法导论24.3 5题
  • 在线Html到Markdown转换器
  • 【Conda】Conda命令详解:高效更新与环境管理指南
  • Hive数仓操作(十七)
  • 集合框架03:Collection使用(2)
  • RabbitMQ入门1—queue参数之type
  • 国外电商系统开发-运维系统资产属性-命令执行功能
  • DINOv2: Learning Robust Visual Featureswithout Supervision
  • 代码随想录Day 62|Floyd 算法精讲、A \* 算法精讲 (A star算法),题目:97. 小明逛公园、127. 骑士的攻击
  • 【源码+文档】基于SpringBoot+Vue校园智慧迎新服务平台
  • 123456