我试图找出一个JSON_SET()
查询,该查询会将{key2: 2}
添加到$.a
的所有元素中:
{
"a": [
{
"key1": 1
},
{
"key1": 1
}
]
}
很显然,由于路径中的'*'
,该操作失败了:
UPDATE table SET json=JSON_SET(json, '$a[*].key2', 2);
这怎么办?
谢谢!
答案 0 :(得分:2)
一个选项是JSON_TABLE和JSON_ARRAYAGG:
UPDATE `table`
INNER JOIN (
SELECT
JSON_ARRAYAGG(
JSON_SET(`der`.`_json`, '$.key2', 2)
) `json_key2`
FROM
`table`,
JSON_TABLE(`table`.`json`,
'$.a[*]'
COLUMNS(
`_json` JSON PATH '$'
)
) `der`
GROUP BY
`der`.`_json`
) `der`
SET `table`.`json` = JSON_SET(
`table`.`json`,
'$.a',
`der`.`json_key2`
);
请参见db-fiddle。