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 |
+---------------------------------------+