如何在MySQL中用另一个列表扩展现有列表?
MySQL 直接合并JSON数组列的解决方案
核心问题
你用JSON_ARRAY_APPEND得到的结果不符合预期,是因为这个函数的作用是给数组追加单个元素,它会把你传入的第二个数组当成一个整体字符串塞进去,而不是拆分出元素合并。
可行方案
方案1:用JSON_MERGE_PRESERVE(推荐,MySQL 5.7.22+支持)
这个函数专门用来合并JSON结构,对于数组会直接把元素合并到一起,直接执行更新即可,不用提取数组再处理:
UPDATE 你的表名 SET 目标JSON列 = JSON_MERGE_PRESERVE(目标JSON列, '["item 3", "item 4"]') WHERE 你的筛选条件;
执行后,原数组会直接扩展成["item 1", "item 2", "item 3", "item 4"],完全符合需求。
方案2:低版本MySQL兼容方案(仅当数组格式规范时用)
如果你的MySQL版本低于5.7.22,不支持JSON_MERGE_PRESERVE,可以用字符串拼接的方式(注意:仅当数组里没有特殊转义字符或]时安全):
UPDATE 你的表名 SET 目标JSON列 = CONCAT( LEFT(目标JSON列, LENGTH(目标JSON列)-1), ', "item 3", "item 4"', ']' ) WHERE 你的筛选条件;
原理是把原数组的末尾]去掉,加上新元素的字符串,再补回],实现合并。
内容的提问来源于stack exchange,提问作者DMcC
相关产品推荐
相关产品推荐

