#查询属性值是否挂在sku SELECT * FROM co_sku WHERE JSON_CONTaiNS(common_attributes, CONCAT(SELECT id from co_at
#查询属性值是否挂在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
--结束END--
本文标题: MySql-使用JSON_REMOVE和JSON_SEARCH删除Json数组数值类型的元素
本文链接: https://lsjlt.com/news/421997.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-23
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0