JSON_CONTAINS_PATH
时间: 2025-06-07 15:21:07 浏览: 8
### JSON_CONTAINS_PATH 函数的用法
`JSON_CONTAINS_PATH` 是 MySQL 提供的一个用于检查 JSON 文档中是否存在指定路径的函数。它主要用于验证某个路径是否存在于给定的 JSON 数据结构中。
#### 函数定义
`JSON_CONTAINS_PATH(target, one_or_all, path[, path]...)`
- `target`: 被检查的目标 JSON 文档。
- `one_or_all`: 这是一个字符串,取值可以是 `'one'` 或者 `'all'`。
- 当设置为 `'one'` 时,只要有一个路径存在即返回 true。
- 当设置为 `'all'` 时,则所有列出的路径都必须存在才返回 true。
- `path`: 需要检查的 JSON 路径表达式。支持多个路径作为可选参数传入[^4]。
#### 返回值说明
该函数会返回以下三种结果之一:
- **0**: 表示目标 JSON 文档不包含任何所列路径中的任何一个。
- **1**: 表示至少一个路径被找到(当使用 `'one'` 参数时),或者所有路径都被找到(当使用 `'all'` 参数时)。
- **NULL**: 如果输入参数中有 NULL 值,或者无法解析某些路径,则返回 NULL[^2]。
#### 使用示例
假设有一张表名为 `member`,其中一列表示用户的个人信息字段 `info` 存储的是 JSON 类型数据:
```sql
CREATE TABLE member (
id INT PRIMARY KEY,
info JSON NOT NULL
);
INSERT INTO member (id, info) VALUES
(1, '{"name": "Alice", "hobbies": ["reading", "swimming"]}'),
(2, '{"name": "Bob"}');
```
##### 示例 1: 检查单个路径的存在性
下面这条语句用来查找那些在 `info` 列里有数组索引 `[0]` 的记录:
```sql
SELECT * FROM member WHERE JSON_CONTAINS_PATH(info, 'one', '$[0]');
```
此查询将只匹配具有数组的第一个元素存在的行,因此只会选出 Alice 的记录。
##### 示例 2: 同时检测多个路径
如果想确认某条记录既含有键 `"name"` 又含数组位置 `$[0]` ,则可以用如下方式实现:
```sql
SELECT * FROM member WHERE JSON_CONTAINS_PATH(info, 'all', '$.name', '$[0]');
```
这里因为 Bob 记录缺少 hobbies 数组部分所以不会满足条件而被排除在外。
### 注意事项
尽管 `JSON_CONTAINS_PATH` 和 `JSON_CONTAINS` 名字相似,但它们的功能完全不同。前者专注于判断路径本身是否存在;后者则是针对具体数值或子文档的内容进行比较操作[^3]。
阅读全文
相关推荐



















