选择两个列表存在交集的查询



>我有一个包含两列的表:

  1. id (integer)
  2. list_colum (longtext)- 包含 JSON 数组(例如 [1, 2, 3](

我想选择与我的输入列表有交集的所有记录。

让我解释一下:

我的输入是一个列表 -[2, 3]

伪代码:

SELECT * 
FROM table
WHERE  intersection of [2, 3] and table.list_column is not empty list;

是否可以在 SQL 中执行此操作?

我正在使用最新版本的MariaDB。

编辑:答案没有给出真正的交集:它只检查给定的JSON数组是否交集,而不是它与存储值之间是否存在交集。

<小时 />

JSON_CONTAINS应该可以工作:

MariaDB [(none)]> SET @json = '[1,2,3,4,5,6]';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SELECT JSON_CONTAINS(@json, '[1, 3, 5]');
+-----------------------------------+
| JSON_CONTAINS(@json, '[1, 3, 5]') |
+-----------------------------------+
|                                 1 |
+-----------------------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> SELECT JSON_CONTAINS(@json, '[1, 2, 3]');
+-----------------------------------+
| JSON_CONTAINS(@json, '[1, 2, 3]') |
+-----------------------------------+
|                                 1 |
+-----------------------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> SELECT JSON_CONTAINS(@json, '[7]');
+-----------------------------+
| JSON_CONTAINS(@json, '[7]') |
+-----------------------------+
|                           0 |
+-----------------------------+
1 row in set (0.00 sec)
MariaDB [(none)]> SELECT JSON_CONTAINS(@json, '[5, 6, 7]');
+-----------------------------------+
| JSON_CONTAINS(@json, '[5, 6, 7]') |
+-----------------------------------+
|                                 0 |
+-----------------------------------+
1 row in set (0.00 sec)

最新更新