mysql - 如何在 SQL 中迭代 JSON?
问题描述
所以我有一个 JSON 变量,它有几个像这样的值:
"["1", "2", "3", "4"]"
我需要做的是将该值传递给 SQL 过程以挂载查询,其中 WHERE 子句添加 JSON 中的所有值,因此类似于解析 JSON,对其进行交互并连接它以获得类似的 @where至:
AND id=1 AND id=2 AND id=3 AND id=4
我尝试了这样的事情,因为在已经存在的过程中发生了非常相似的事情,但不起作用:
SET @idWhere="";
IF id IS NOT NULL AND JSON_EXTRACT(id, '$[0]') IS NOT NULL THEN
SET @idWhere = CONCAT(@idWhere," AND JSON_SEARCH('",id,"','one',id) IS NOT NULL ");
END IF;
其中 id 是 JSON 的名称和列名。
提前致谢!
解决方案
如果您正在运行 MySQL 8.0,则可以使用json_table()
将数组转换为记录集,然后使用以下命令聚合结果group_concat()
:
select group_concat(concat('id = ', i) separator ' and ') id_where
from json_table(
'["1", "2", "3", "4"]',
"$[*]" columns(i int path '$')
) as t
在这个关于 DB Fiddle 的演示中,这会产生:
| id_where |
| --------------------------------------- |
| id = 1 and id = 2 and id = 3 and id = 4 |
注意:你可能想要or
s,而不是and
s。
推荐阅读
- mysql - 关于以月返回的结果的 DATEDIFF() 函数问题
- scala - Scala,F-Bounded多态性未按预期工作
- .net - 在 dotnet 后端设置聊天服务器并将颤振作为前端
- python - 如何将 Python 元组转换为字典
- php - 服务器上的 PHP- 模块 imagick 和模块 SourceGuardian 错误
- javascript - ENQUEUE 脚本直接而不是先注册
- java - Zxing二维码扫描仪自动关闭冲洗灯
- bash - 如何检查 shell 脚本/Vim 是否在 VS Code 集成终端中运行?
- android - Volley 或 Fast Networking 不会在特定链接中下载整个文件(损坏的文件)
- javascript - Bootstrap datepicker - 在特定月份的指定日期添加工具提示