【2021/12/18】MySQL的json查询之json_contains、json_contains_path

【2021/12/18】MySQL的json查询之json_contains、json_contains_path
最新回答
后巷的猫街少女

2026-06-26 01:16:22

在MySQL中探索JSON查询时,json_contains与json_contains_path功能展现出其独特魅力。这两项特性主要帮助我们在JSON数据中进行精准检索。

首先,让我们聚焦于json_contains。这个函数的运行逻辑类似于“大海捞针”,其目的是在指定的JSON数据中寻找特定的“针”或值。使用时,我们只关注前两个参数,前者代表我们要搜索的“大海”,后者代表我们要寻找的“针”。例如,假设我们从成员表中筛选出包含ID为4的成员,查询语句如下:

select * from member where json_contains(info, '4');

值得注意的是,无论参数是数据库字段还是整数形式,都需确保正确使用引号,以避免误判。

接下来,让我们以json_array作为例子。json_array(1,2,3,4,5,6,7)与从member表中筛选特定信息的查询方式相似,展示的是数组元素的查询应用。

此外,将json_array(21,31,41,51)与json_array(age)进行比较,进一步展示了如何在数组中搜索特定元素的技巧。

接下来,我们转向json_contains_path,这是一个用于判断JSON对象内是否存在特定键名的函数。虽然这一功能在预设数据库结果中可能鲜有应用,但在特定场景下,它能够提供额外的检索能力。json_contains_path函数的使用需遵循一定的规则,包括目标判断和键名指定。

例如,查询包含键名为"one"且位于数组索引0处的成员信息,如下所示:

select * from member where json_contains_path(info, 'one', '$[0]');

进一步,尝试在数组的第三个位置搜索键名为"one"的元素,如下:

select * from member where json_contains_path(info, 'one', '$[3]');

最后,假设我们想要从JSON对象中获取键名为"a"的元素,查询语句如下:

select * from member where json_contains_path(info, 'one', '$.a');

通过上述介绍,我们能够直观地理解MySQL中JSON查询的精髓,以及如何利用json_contains与json_contains_path实现高效的数据检索。