mysql - 如何使用 JSON 函数从 mysql 中的另一个数组中删除数组元素?
问题描述
set @a = '["1","2","3"]';
set @b = '["4","2","3"]';
我有两个 json 数组。现在我想从@a 中删除@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”] |
推荐阅读
- amazon-web-services - AWS S3 - 配置网站访问
- racket - 在球拍中编写词法分析器 - 包含指令有问题
- amazon-web-services - 使用分区键和特定排序键列表查询 DynamoDB
- facebook-graph-api - Facebook Graph API:检索给定用户评论的页面中的评论
- java - RuntimeException 类型不匹配。使用 phoenix JDBC 为空的布尔值
- php - 为什么我的 register_shutdown_function() 不能使用命名空间?
- ios - iOS - 如何使用泛型在 Swift 中编写 DecodeHelper 类?
- jquery - 扩展 jQuery 表格搜索脚本
- spring - Eclipse STS 使用子项目在本地运行 Spring Boot
- django - 使用 Stripe 的 Django ACH 的基本问题