MySql 在 JSON 对象中搜索带有特定属性值对象的数组

问题描述 投票:0回答:1

我有一个表“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?

mysql json mariadb json-extract json-contains
1个回答
0
投票

我认为使用

JSON_CONTAINS
可以通过避免像LIKE这样基于字符串的操作使您的查询更加明确并且可能更快。

   SELECT id, jsonval
    FROM sometable
    WHERE JSON_CONTAINS(jsonval->'$.programs[*].id', '14');
© www.soinside.com 2019 - 2024. All rights reserved.