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 的使用不能通过使用数据库规范化更好地完成。