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

MySQL中SELECT提取JSON数据触发#3143错误的原因解析

MySQL JSON_EXTRACT动态路径触发#3143错误的原因及解决

问题重现

现有两张表,尝试通过主表person的ref字段值,从副表person_details的JSON类型字段details中提取对应数据:

create table person ( 
    id int(8),
    ref varchar(20),
    primary key (id)
);

create table person_details (
    id int(8),
    details json,
    primary key (id)
);

-- 执行此SQL触发错误
SELECT JSON_EXTRACT(details, CONCAT('$.', p.ref))
FROM person p
JOIN person_details d using (id);

错误信息:

#3143 - Invalid JSON path expression. The error is around character position 12.

错误原因

核心问题是动态拼接的JSON路径不符合MySQL的JSON路径语法规范:

  • 若person.ref字段的值包含特殊字符(如空格、连字符-、点号.、括号等),直接拼接成$.xxx格式的路径会被判定无效——JSON键名若不是合法标识符(仅含字母、数字、下划线且不以数字开头),必须用双引号包裹。
  • 即便ref的值是合法标识符,MySQL对JSON路径的语法校验在解析阶段进行,动态拼接的字符串可能无法被正确识别为合法路径。

解决方法

修改路径拼接逻辑,将动态键名用双引号包裹,确保路径符合语法要求:

SELECT JSON_EXTRACT(details, CONCAT('$."', p.ref, '"'))
FROM person p
JOIN person_details d using (id);

也可以使用更简洁的->>运算符实现相同效果:

SELECT details->>CONCAT('$."', p.ref, '"')
FROM person p
JOIN person_details d using (id);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:20:24