set @a = '["1","2","3"]';
set @b = '["4","2","3"]';
我有两个json数组。现在我想从@b中删除所有元素,如果它存在的话。否则忽略。
预期结果:
["1"]
我们可以循环遍历@b并从@a中逐个移除。
但我正在寻找一个最好的解决方案。
有没有类似JSON_REMOVE_ALL((的东西;
下面使用JSON函数提取@a
中不在@b
中的元素。
- JSON_TABLE用于将
@a
转换为之前的表 - JSON_CONTAINS用于检查
@a
中的元素是否存在于@b
中 - 最后,JSON_ARRAYAGG将结果聚合为一个JSON数组值
架构(MySQL v8.0(
查询#1
set @a = cast('["1","2","3"]' as json);
没有要显示的结果。
查询#2
set @b = cast('["4","2","3"]' as json);
没有要显示的结果。
查询#3
SELECT
JSON_ARRAYAGG(num) result
FROM
JSON_TABLE(@a,"$[*]" COLUMNS(num json PATH "$" )) ta
WHERE JSON_CONTAINS(@b,num,'$')=0;
结果 |
---|
["1"] |