【问题标题】:MySQL append data to each JSON Object within JSON ArrayMySQL 将数据附加到 JSON 数组中的每个 JSON 对象
【发布时间】:2021-03-05 22:26:24
【问题描述】:

在此表中 - mytable 我有一个 json 列 - col 及其内容
[{"id": 1, "data1": "abc", "data2": "xyz"}, {"id": 2, "data1": "def", "data2": "ghi"}]

还有一张桌子 - product

+----+---------+
| id | name    |
+----+---------+
|  1 | pro 1   |
+----+---------+
|  2 | pro 2   |
+----+---------+

有没有一种方法可以将名称附加到 JSON 数组中的每个 JSON 对象 例如-[{"id": 1,"name":"pro 1", "data1": "abc", "data2": "xyz"}, {"id": 2,"name":"pro 2", "data1": "def", "data2": "ghi"}]

【问题讨论】:

  • 将数组拆分为单独的对象,加入附加数据表,更新对象,返回数组。
  • 指定精确的 MySQL 版本。
  • select version(); 显示什么?你想修改 mytable.col 中的内容还是只选择添加名称?
  • @Akina mysql 5.7
  • 版本太旧。查询将太复杂。我建议升级服务器。如果没有,则创建迭代存储过程。

标签: mysql sql arrays json aggregate-functions


【解决方案1】:

在 MySQL 8.0 中,您可以为此使用 json_table()。这个想法是将 json 数组取消嵌套到行,加入 product 表,然后重新聚合。

select json_arrayagg(
    json_object(
        'id',    x.id,
        'data1', x.data1,
        'data2', x.data2,
        'name',  p.name
    )
) as col
from mytable t
cross join json_table(
    t.col, 
    '$[*]' columns ('id' int, 'data1' varchar(50), 'data2' varchar(50))
) x
inner join product p on p.id = x.id
group by x.id

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2023-01-19
    • 2016-07-18
    • 2023-01-12
    • 2013-08-20
    • 1970-01-01
    相关资源
    最近更新 更多