繁体   English   中英

MySQL 5.7:将简单的 JSON_ARRAY 转换为行

[英]MySQL 5.7 : convert simple JSON_ARRAY to rows

我有一个带有 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  |
+-----+

您可以在 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。 开发人员继续不恰当地使用它。 他们喜欢这样可以轻松插入半结构化数据,但他们发现它使查询该数据过于复杂。

我有一个带有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  |
+-----+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM