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

含REPLACE的WHERE IN语句查询管道分隔tariff_id仅返回首条问题

问题根因

原有写法不生效是因为REPLACE(provision.tariff_id, '|', ',')返回的是单个字符串值,例如'1272,1312,1314',而IN运算符要求传入多个独立值,MySQL执行时会自动把整个字符串转为数值类型,仅会取第一个数字部分,所以只能匹配到第一个tariff_id。

正确实现方案

无需修改表结构或业务逻辑,直接替换子查询的匹配条件为FIND_IN_SET函数即可,该函数兼容所有主流老旧MySQL版本:

SELECT
    provision.id,
    provision.tariff_id,
    tariff.id,
    (
        SELECT GROUP_CONCAT(tariff_name) 
        FROM tariff 
        WHERE FIND_IN_SET(tariff_id, REPLACE(provision.tariff_id, '|', ',')) > 0
    ) AS tn
FROM
    provision
    LEFT JOIN tariff ON tariff.id = provision.tariff_id

补充说明:原查询中的LEFT JOIN tariff ON tariff.id = provision.tariff_id逻辑仅能关联到provision存储的第一个tariff_id对应的tariff数据,如果你不需要这部分关联结果可以直接删除这段JOIN语句。

内容的提问来源于stack exchange,提问作者Sirko.uhl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:51:01