Select 如果数组包含另一个数组的元素
Select if array contains an element of another array
我有一个 table,它有一个 JSON
类型字段,我在其中保存了一个数字数组,例如 [1, 2, 3, 4]
。
我想 select 记录其数组集至少包含我在 php 脚本中的另一个数组的一个元素。
我知道 JSON_CONTAINS
函数可以用来查看我的数组是否包含一个元素,但是如果两个数组至少有一个共同的数字(无论在什么情况下),我怎么 select指数)。
例如:
[1, 2, 3] and [5, 0, 2] -> True
[9, 2, 1] and [0, 5, 3] -> False
[4, 0, 2] and [4, 2, 6] -> True
目前,我使用多个 JSON_CONTAINS
来检查是否有公共元素,这样:
SELECT *
FROM mytable
WHERE JSON_CONTAINS(ar, 0, '$') OR
JSON_CONTAINS(ar, 1, '$') OR
JSON_CONTAINS(ar, 2, '$')
但我想可能有更优雅的方式来做到这一点。
我搜索过但找不到合适的函数,但如果这是一个骗局,请告诉我。
提前致谢!
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-overlaps
mysql> SELECT JSON_OVERLAPS("[1,3,5,7]", "[2,5,7]");
+---------------------------------------+
| JSON_OVERLAPS("[1,3,5,7]", "[2,5,7]") |
+---------------------------------------+
| 1 |
+---------------------------------------+
我有一个 table,它有一个 JSON
类型字段,我在其中保存了一个数字数组,例如 [1, 2, 3, 4]
。
我想 select 记录其数组集至少包含我在 php 脚本中的另一个数组的一个元素。
我知道 JSON_CONTAINS
函数可以用来查看我的数组是否包含一个元素,但是如果两个数组至少有一个共同的数字(无论在什么情况下),我怎么 select指数)。
例如:
[1, 2, 3] and [5, 0, 2] -> True
[9, 2, 1] and [0, 5, 3] -> False
[4, 0, 2] and [4, 2, 6] -> True
目前,我使用多个 JSON_CONTAINS
来检查是否有公共元素,这样:
SELECT *
FROM mytable
WHERE JSON_CONTAINS(ar, 0, '$') OR
JSON_CONTAINS(ar, 1, '$') OR
JSON_CONTAINS(ar, 2, '$')
但我想可能有更优雅的方式来做到这一点。
我搜索过但找不到合适的函数,但如果这是一个骗局,请告诉我。 提前致谢!
https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#function_json-overlaps
mysql> SELECT JSON_OVERLAPS("[1,3,5,7]", "[2,5,7]");
+---------------------------------------+
| JSON_OVERLAPS("[1,3,5,7]", "[2,5,7]") |
+---------------------------------------+
| 1 |
+---------------------------------------+