説明
この関数は、2つのJSONドキュメントを比較します。2つのドキュメントに共通するキー・バリュー・ペア(key-value)または配列要素がある場合は1を返し、そうでない場合は0を返します。
構文
JSON_OVERLAPS(json_doc1, json_doc2)
説明
パラメータ json_doc1 と json_doc2 は、それぞれ比較対象の2つのJSONドキュメントを指定します。両方のパラメータがスカラーの場合、関数は単純な等価性テストを実行します。
この関数はJSON_CONTAINS()に対応しており、検索対象の配列のすべての要素が、含まれる配列に存在することを要求します。したがって、JSON_CONTAINS()は検索キーに対してAND演算を実行するのに対し、JSON_OVERLAPS()はOR演算を実行します。
2つの配列を比較する際、もしそれらが1つ以上の配列要素を共有する場合、JSON_OVERLAPS()は1を返し、そうでない場合は0を返します。
WHERE句でJSON_OVERLAPS()を使用してInnoDBテーブルのJSON列をクエリする場合、複数値インデックスを使用して最適化できます。
例
obclient> SELECT JSON_OVERLAPS("[1,3,5,7]", "[2,3,5]")
+---------------------------------------+
| JSON_OVERLAPS("[1,3,5,7]", "[2,3,5]") |
+---------------------------------------+
| 1 |
+---------------------------------------+
1 row in set
obclient> SELECT JSON_OVERLAPS("[1,3,5,7]", "[2,4,6]")
+---------------------------------------+
| JSON_OVERLAPS("[1,3,5,7]", "[2,4,6]") |
+---------------------------------------+
| 0 |
+---------------------------------------+
1 row in set
obclient> 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
obclient> SELECT JSON_OVERLAPS('2', '2');
+-------------------------+
| JSON_OVERLAPS('2', '2') |
+-------------------------+
| 1 |
+-------------------------+
1 row in set
obclient> SELECT JSON_OVERLAPS('[4,5,6,7]', '5');
+---------------------------------+
| JSON_OVERLAPS('[4,5,6,7]', '5') |
+---------------------------------+
| 1 |
+---------------------------------+
1 row in set
/* 该函数不执行数据类型转换*/
obclient> SELECT JSON_OVERLAPS('[4,"5",6,7]', '5');
+-----------------------------------+
| JSON_OVERLAPS('[4,"5",6,7]', '5') |
+-----------------------------------+
| 0 |
+-----------------------------------+
1 row in set