【问题标题】:MySQL 5.7 : convert simple JSON_ARRAY to rowsMySQL 5.7:将简单的 JSON ARRAY 转换为行
【发布时间】:2020-05-31 15:09:10
【问题描述】:

我有一个带有 JSON_ARRAY 列的简单表:

+----+---------+
| id | content |
+----+---------+
|  1 | [3, 4]  |
|  2 | [5, 6]  |
+----+---------+

我想列出特定 id 的所有内容引用

SELECT JSON_EXTRACT(content, '$') as res FROM table WHERE id=1

但我希望结果成行:

+-----+
| res |
+-----+
|  3  |
|  4  |
+-----+

【问题讨论】:

  • 这能回答你的问题吗? Convert JSON array in MySQL to rows
  • 很遗憾不是,因为我的列是一个简单的数组,而不是带索引的 JSON
  • 请阅读stackoverflow.com/questions/3653462/… 有可能拆分该 cmma 分隔的字符串,您可以在 SO 中找到一些示例
  • 我很好奇,你为什么要将这些值存储在 JSON 数组中,而你希望每个值都在自己的行上?
  • 只处理现有的数据库模型:(

标签: mysql arrays mysql-json


【解决方案1】:

您可以在 MySQL 8.0 中使用JSON_TABLE()

select r.res from mytable, 
 json_table(mytable.content, '$[*]' columns (res int path '$')) r 
where mytable.id = 1

我在 MySQL 8.0.17 上测试过,这是输出:

+------+
| res  |
+------+
|    3 |
|    4 |
+------+

如果您使用 MySQL 8.0 之前的版本,您有以下选择:

  • 找到一些极其复杂的 SQL 解决方案。这几乎总是解决问题的错误方法,因为您最终会得到维护成本太高的代码。
  • 按原样获取 JSON 数组,并在应用程序代码中展开。
  • 规范化您的数据,以便每行有一个值,而不是使用 JSON 数组。

我经常在 Stack Overflow 上发现有关在 MySQL 中使用 JSON 的问题,这些问题让我相信这个特性已经毁了 MySQL。开发人员一直在不恰当地使用它。他们喜欢它使插入半结构化数据变得容易,但他们发现它使查询该数据过于复杂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    相关资源
    最近更新 更多