在MySQL表中,如何使用先前的值将当前保存JSON数组值的列的值转换为JSON对象的数组?
当前列(仅包含ID):
items
-------
[1,2,3]
[2,3]
...
所需格式:
items
-------
[ { id:1, lastUpdatedBy:"", timeStamp:"--" },{ id:2, lastUpdatedBy:"", timeStamp:"--" },{ id:3, lastUpdatedBy:"", timeStamp:"--" }]
[ { id:2, lastUpdatedBy:"", timeStamp:"--" },{ id:3, lastUpdatedBy:"", timeStamp:"--" }]
...
如果您正在运行MySQL 8.0,则可以使用json_table()
取消嵌套该数组,然后构建json对象并使用json_arrayagg()
进行聚合。
为此,您需要一个主键-我假设是pk
:
select json_arrayagg(json_object(
'id', i.id,
'lastUpdatedBy', 12,
'timestamp', '--'
)) items
from mytable t
cross join json_table(t.items, '$[*]' columns (id int path '$')) i
group by t.pk
如果要update
查询:
update mytable t
inner join (
select json_arrayagg(json_object(
'id', i.id,
'lastUpdatedBy', 12,
'timestamp', '--'
)) items
from mytable t
cross join json_table(t.items, '$[*]' columns (id int path '$')) i
group by t.pk
) x on x.pk = t.pk
set x.items = t.items