説明
この関数は、2つのJSONドキュメントを比較するために使用されます。2つのドキュメントが共通のキー値ペアまたは配列要素を持つ場合は1を返し、そうでない場合は0を返します。
構文
JSON_OVERLAPS(json_doc1, json_doc2)
説明
パラメータ json_doc1 と json_doc2 は、比較対象の2つのJSONドキュメントをそれぞれ指定します。両方のパラメータがスカラーである場合、関数は単純な同一性テストを実行します。
この関数は、JSON_CONTAINS() に相当します。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