我有一个包含两列的表:
id (integer)
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的最新版本。
答案 0 :(得分:3)
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)