【问题标题】:How can I iterate a JSON in SQL?如何在 SQL 中迭代 JSON?
【发布时间】:2020-02-21 12:35:43
【问题描述】:

所以我有一个带有多个值的 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 的名称和列名。

提前致谢!

【问题讨论】:

  • 阅读SQL语句INhere
  • 你能分享你的示例 json 数据吗?
  • 示例 JSON 数据正是我发布的内容:"["1", "2", "3", "4"]"
  • 编辑:好吧,不完全是,它可能会改变数字,有更多,有更少,但组织就是这样。

标签: mysql sql json


【解决方案1】:

如果您运行的是 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

在这个 demo on DB Fiddle 中,产生:

| id_where                                |
| --------------------------------------- |
| id = 1 and id = 2 and id = 3 and id = 4 |

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-03
    • 2022-01-23
    • 2019-05-01
    • 2015-09-24
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多