跳到主要内容

JSON_OVERLAPS

描述

该函数用于比较两个 JSON 文档。如果两个文档具有共同的键值对(key-value)或数组元素,则返回 1,否则返回 0。

语法

JSON_OVERLAPS(json_doc1, json_doc2)

说明

参数 json_doc1json_doc2 分别指定两个用于比较的 JSON 文档。如果两个参数都是标量,则函数执行简单的相等性测试。

该函数与 JSON_CONTAINS() 对应,它要求搜索的数组的所有元素都存在于被搜索的数组中。因此,JSON_CONTAINS() 对搜索键执行 AND 运算,而 JSON_OVERLAPS() 执行 OR 运算。

在比较两个数组时,如果它们共享一个或多个数组元素,则 JSON_OVERLAPS() 返回 1,否则返回 0

WHERE 子句中使用 JSON_OVERLAPS() 对 InnoDB 表的 JSON 列的查询,可以使用多值索引进行优化。

示例

SELECT JSON_OVERLAPS("[1,3,5,7]", "[2,3,5]");
+---------------------------------------+
| JSON_OVERLAPS("[1,3,5,7]", "[2,3,5]") |
+---------------------------------------+
| 1 |
+---------------------------------------+
1 row in set (0.001 sec)

SELECT JSON_OVERLAPS("[1,3,5,7]", "[2,4,6]");
+---------------------------------------+
| JSON_OVERLAPS("[1,3,5,7]", "[2,4,6]") |
+---------------------------------------+
| 0 |
+---------------------------------------+
1 row in set (0.001 sec)

SELECT JSON_OVERLAPS('[[1,2],[3,4],5]', '[1,[2,3],[4,5]]');
+-----------------------------------------------------+
| JSON_OVERLAPS('[[1,2],[3,4],5]', '[1,[2,3],[4,5]]') |
+-----------------------------------------------------+
| 0 |
+-----------------------------------------------------+
1 row in set (0.001 sec)

SELECT JSON_OVERLAPS('2', '2');
+-------------------------+
| JSON_OVERLAPS('2', '2') |
+-------------------------+
| 1 |
+-------------------------+
1 row in set (0.001 sec)

SELECT JSON_OVERLAPS('[4,5,6,7]', '5');
+---------------------------------+
| JSON_OVERLAPS('[4,5,6,7]', '5') |
+---------------------------------+
| 1 |
+---------------------------------+
1 row in set (0.001 sec)

/* 该函数不执行数据类型转换*/
SELECT JSON_OVERLAPS('[4,"5",6,7]', '5');
+-----------------------------------+
| JSON_OVERLAPS('[4,"5",6,7]', '5') |
+-----------------------------------+
| 0 |
+-----------------------------------+
1 row in set (0.001 sec)