如何在MySQL中删除JSON数组内name为null的对象(无需存储过程)
解决MySQL JSON数组删除指定对象的问题
直接用MySQL 8.0+支持的JSON函数就能实现单条UPDATE语句完成需求,无需存储过程:
UPDATE Table1 SET ColumnB = ( SELECT JSON_ARRAYAGG(obj) FROM JSON_TABLE( Table1.ColumnB, '$[*]' COLUMNS ( obj JSON PATH '$', name VARCHAR(255) PATH '$.name' NULL ON EMPTY ) ) AS jt WHERE name IS NOT NULL ) WHERE JSON_CONTAINS_PATH(Table1.ColumnB, 'one', '$[*].name') = 1 AND JSON_SEARCH(Table1.ColumnB, 'one', 'null', NULL, '$[*].name') IS NOT NULL;
关键部分解析:
- JSON_TABLE:把ColumnB里的JSON数组拆成逐行记录,每行包含完整的数组对象
obj,以及该对象的name字段值(若对象无name字段,NULL ON EMPTY会返回null)。 - JSON_ARRAYAGG:将过滤后保留的对象重新拼接成新的JSON数组,替换原ColumnB的值。
- WHERE子句:仅更新确实存在
name为null对象的记录,避免对无修改需求的行执行无效更新,提升执行效率。
版本要求:
必须使用MySQL 8.0.4及以上版本,因为JSON_TABLE函数是在该版本中引入的。
内容的提问来源于stack exchange,提问作者tech_learner
相关产品推荐
相关产品推荐

