You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中IN子句传入group_concat子查询结果仅返回单行问题

问题根本原因

  • GROUP_CONCAT(fruit_id)的返回结果是单个逗号拼接的字符串,并不是IN子句需要的多个独立数值集合,你执行的SQL本质等价于WHERE f.id IN ('2,8,9,11,13,15')
  • MySQL做数值和字符串的隐式类型转换时,会从字符串开头截取到第一个非数字字符为止,字符串'2,8,9,11,13,15'转成数值后结果只有2,因此仅能匹配到id为2的柠檬记录。

正确写法

写法1(推荐,性能最优):直接子查询返回id集合,不需要拼接

SELECT 
    f.name AS name, f.price AS price
FROM
    fruits f 
WHERE f.id IN (SELECT fruit_id FROM fruits_seasons WHERE monsoon = 1);

写法2(适配现有逻辑的修改方案):用FIND_IN_SET做字符串匹配

SELECT 
    f.name AS name, f.price AS price
FROM
    fruits f 
WHERE FIND_IN_SET(f.id, (SELECT group_concat(fruit_id) FROM fruits_seasons WHERE monsoon = 1));

内容的提问来源于stack exchange,提问作者Suvel Mano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:39:03