文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySql-使用JSON_REMOVE和JSON_SEARCH删除Json数组数值类型的元素

2023-09-30 18:59

关注

#查询属性值是否挂在sku

SELECT * FROM co_sku WHERE JSON_CONTAINS(common_attributes, CONCAT(SELECT id from co_attribute_value WHERE value = '10' and attribute_id = 7)) and code = '20515';

#删除sku关联属性值

update co_sku cs join co_attribute_value cav join co_attribute ca on cav.attribute_id = ca.id set cs.update_time=now(), cs.common_attributes = JSON_REMOVE(cs.common_attributes, JSON_UNQUOTE(JSON_SEARCH( REPLACE(REPLACE(REPLACE(JSON_EXTRACT(common_attributes, '$[*]'), ', ', '","'), '[', '["'), ']', '"]'), 'one', cav.id))) where ca.code = 'keywords' and cav.value = '压取器' and cs.code = '61605';

common_attributes=[80, 242, 24, 2, 4]

解决思路:

第一步:使用JSON_REMOVE把属性id从co_sku的common_attributes(json数组)里删除。

第二步:因为JSON_REMOVE需要根据元素路径去查,所以使用JSON_SEARCH找到属性id在common_attributes的路径path

第三步:使用JSON_EXTRACT查出common_attributes所有的数组元素

第四步:因为JSON_SEARCH里搜索的数组中的元素需要用双引号括起来,而co_sku的common_attributes中数组的元素并没有,因此需要REPLACE将取出来的数组加上双引号。

第五步:因为JSON_REMOVE中的路径不能是双引号,而JSON_SEARCH查出来的路径是有双引号的,因此需要使用JSON_UNQUOTE去除路径中的双引号。

第六步:又因为common_attributes中数组中的元素有可能重复,因此使用JSON_SEARCH的时候,使用one 匹配到第一条就返回,以防返回多条路径。

方法介绍:

JSON_EXTRACT:想要查询出来json中某个字段的值

JSON_EXTRACT(json_doc, path[, path] …)

REPLACE:替换

SELECT REPLACE('www.mysql.com', 'w', 'Ww');

-> 'WwWwWw.mysql.com'

JSON_SEARCH:指定JSON搜索路径

JSON_SEARCH(json_doc,one_or_all,search_str [,escape_char [,path] ...])

json_doc:要查询的json数据源,列

one_or_all:可选值 one 或者 all ,one 表示匹配到第一条就返回,all表示返回当期匹配到的所有路径,数组

search_str :查询的字符串

JSON_UNQUOTE:去双引号

mysql> SET @j = '"abc"';

mysql> SELECT @j, JSON_UNQUOTE(@j);

| "abc" | abc |

由于json储存的键值是带双引号,查询的字段结果也是带双引号。JSON_UNQUOTE() 函数的作用是去掉引号的功能。或者也可以使用REPLACE ()做替换

JSON_REMOVE:对一个key或多个key从个json记录中去掉

mysql> SET @j = '["a", ["b", "c"], "d"]';

mysql> SELECT JSON_REMOVE(@j, '$[1]');

["a", "d"]

来源地址:https://blog.csdn.net/shauima/article/details/128640408

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯