【发布时间】:2023-03-29 13:16:01
【问题描述】:
我在 MySQL 表中有一个 json 类型的列,该列中的值是一个简单的一维数组(例如 [1,2,3,4,5])。如何使用json_contains函数返回json数组中包含值“5”的所有行?
【问题讨论】:
我在 MySQL 表中有一个 json 类型的列,该列中的值是一个简单的一维数组(例如 [1,2,3,4,5])。如何使用json_contains函数返回json数组中包含值“5”的所有行?
【问题讨论】:
试试:
mysql> DROP TABLE IF EXISTS `tbl`;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> CREATE TABLE IF NOT EXISTS `tbl` (
-> `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> `json` JSON NOT NULL
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO `tbl`
-> (`json`)
-> VALUES
-> ('[1,2,3,4,5]'),
-> ('[1,2,3,4]'),
-> ('[1,2]'),
-> ('[1]'),
-> ('[1,5]');
Query OK, 5 rows affected (0.01 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT
-> `id`,
-> `json`
-> FROM
-> `tbl`
-> WHERE
-> JSON_CONTAINS(`json`, '5');
+----+-----------------+
| id | json |
+----+-----------------+
| 1 | [1, 2, 3, 4, 5] |
| 5 | [1, 5] |
+----+-----------------+
2 rows in set (0.00 sec)
更新
mysql> DROP TABLE IF EXISTS `tbl`;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE IF NOT EXISTS `tbl` (
-> `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> `json` JSON NOT NULL
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO `tbl`
-> (`json`)
-> VALUES
-> ('["1","2","3","4","5"]'),
-> ('["1","2","3","4"]'),
-> ('["1","2"]'),
-> ('["1"]'),
-> ('["1","5"]');
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT
-> `id`,
-> `json`
-> FROM
-> `tbl`
-> WHERE
-> JSON_CONTAINS(`json`, '"5"');
+----+---------------------------+
| id | json |
+----+---------------------------+
| 1 | ["1", "2", "3", "4", "5"] |
| 5 | ["1", "5"] |
+----+---------------------------+
2 rows in set (0.00 sec)
【讨论】: