MySQL 合并多个 JSON 行的数组
MySQL merge arrays from multiple JSON rows
我有一个 table 和一个 json 列,如下所示:
+----+------------+
| id | myfield |
+----+------------+
| 1 | ["1", "2"] |
| 2 | ["3", "2"] |
| 3 | ["2", "4"] |
+----+------------+
如何将 myfield 中的所有值合并到一个数组中?
我需要一个如下所示的结果:["1", "2", "3", "2", "2", "4"]
,或者删除重复项后效果更好。
我尝试使用这个查询:
SELECT JSON_ARRAYAGG(myfield) FROM json_test
但结果我得到:
[["1", "2"], ["3", "2"], ["2", "4"]]
我假设我需要结合函数 JSON_MERGE 的查询。
这是一个解决方案,但 JSON_TABLE() 函数需要 MySQL 8.0:
SELECT GROUP_CONCAT(j.myvalue) AS flattened_values
FROM mytable, JSON_TABLE(
mytable.myfield, '$[*]' COLUMNS(myvalue INT PATH '$')
) AS j;
输出:
+------------------+
| flattened_values |
+------------------+
| 1,2,3,2,2,4 |
+------------------+
我实际上建议避免存储 JSON 数组。相反,以规范化的方式存储多值数据,在第二 table 秒内。然后你可以在加入的 table.
上使用 GROUP_CONCAT()
我还没有听说 MySQL 中 JSON 的使用不能通过使用数据库规范化更好地完成。
我有一个 table 和一个 json 列,如下所示:
+----+------------+
| id | myfield |
+----+------------+
| 1 | ["1", "2"] |
| 2 | ["3", "2"] |
| 3 | ["2", "4"] |
+----+------------+
如何将 myfield 中的所有值合并到一个数组中?
我需要一个如下所示的结果:["1", "2", "3", "2", "2", "4"]
,或者删除重复项后效果更好。
我尝试使用这个查询:
SELECT JSON_ARRAYAGG(myfield) FROM json_test
但结果我得到:
[["1", "2"], ["3", "2"], ["2", "4"]]
我假设我需要结合函数 JSON_MERGE 的查询。
这是一个解决方案,但 JSON_TABLE() 函数需要 MySQL 8.0:
SELECT GROUP_CONCAT(j.myvalue) AS flattened_values
FROM mytable, JSON_TABLE(
mytable.myfield, '$[*]' COLUMNS(myvalue INT PATH '$')
) AS j;
输出:
+------------------+
| flattened_values |
+------------------+
| 1,2,3,2,2,4 |
+------------------+
我实际上建议避免存储 JSON 数组。相反,以规范化的方式存储多值数据,在第二 table 秒内。然后你可以在加入的 table.
上使用 GROUP_CONCAT()我还没有听说 MySQL 中 JSON 的使用不能通过使用数据库规范化更好地完成。