首页 > 解决方案 > 如何在 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 的名称和列名。

提前致谢!

标签: mysqlsqljson

解决方案


如果您正在运行 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 |

注意:你可能想要ors,而不是ands。


推荐阅读