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

MySQL 5.7用JSON_CONTAINS关联JSON_KEYS结果查询无返回如何解决

问题原因

你遇到的问题是JSON类型不匹配导致的:

  • JSON_KEYS(t.info) 返回的数组元素是字符串类型,你的示例中返回结果为 ["33", "64"],id为带引号的字符串格式
  • 直接把数值类型的tm.id转成JSON后,得到的是数值类型的JSON值,例如33转换后为不带引号的33
    MySQL的JSON_CONTAINS要求查找的元素类型和数组内元素类型完全一致才会返回匹配结果,因此两类值无法匹配,导致查询无返回。

修复后的SQL写法

以下两种写法都兼容MySQL 5.7.12版本,可正常返回预期结果:

写法1:调整JSON_CONTAINS的参数类型

SELECT tm.name
FROM taxi t
JOIN taxi_model tm ON JSON_CONTAINS(JSON_KEYS(t.info), JSON_QUOTE(CAST(tm.id AS CHAR)))
WHERE t.id = 1;

先把数值类型的tm.id转成字符串,再用JSON_QUOTE包裹为字符串类型的JSON值,和JSON_KEYS返回的元素类型完全匹配。

写法2:用JSON_SEARCH判断存在性

SELECT tm.name
FROM taxi t
JOIN taxi_model tm ON JSON_SEARCH(JSON_KEYS(t.info), 'one', CAST(tm.id AS CHAR)) IS NOT NULL
WHERE t.id = 1;

JSON_SEARCH会直接查找数组中匹配对应字符串的元素,返回元素的路径,不为空即表示存在匹配项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:06