我有一个表“sometable”,其中包含一个名为“jsonval”的 JSON 字段,其中包含一个具有属性“programs”的 JSON 对象,该对象包含一个具有属性“id”的对象数组
我想搜索包含 jsonval.programs.id = 14 的记录
以下查询有效:
SELECT id, jsonval, JSON_EXTRACT(jsonval, '$.programs[*].id') FROM `sometable`
WHERE JSON_EXTRACT(jsonval, '$.programs[*].id') LIKE '%"14"%';
因为
JSON_EXTRACT(jsonval, '$.programs[*].id')
会产生保存 id 的数组的字符串表示形式,即: ["14","26"]
但是应该有一个更优雅的解决方案,也许使用 JSON_CONTAINS?
我认为使用
JSON_CONTAINS
可以通过避免像LIKE这样基于字符串的操作使您的查询更加明确并且可能更快。
SELECT id, jsonval
FROM sometable
WHERE JSON_CONTAINS(jsonval->'$.programs[*].id', '14');