首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在JSON_ARRAYAGG中不使用MySQL获取JSON数组

如何在JSON_ARRAYAGG中不使用MySQL获取JSON数组
EN

Database Administration用户
提问于 2021-03-20 11:07:47
回答 1查看 4.5K关注 0票数 2

我不能使用在JSON_ARRAYAGG 5.7.22中引入的MySQL函数,因为我使用的是MySQL 5.7.20。如果我可以使用函数:SELECT JSON_ARRAYAGG(column_name) FROM table_name;,我希望得到一个列值的JSON数组。

我看到了一段SQL:SELECT JSON_ARRAY(GROUP_CONCAT(column_name)) FROM table_name;,它的工作方式与JSON_ARRAYAGG非常相似。问题是,当没有行时,它返回的是[null]而不是null

用某种等价的方法替换JSON_ARRAYAGG函数的最有效方法是什么?我想避免这样的事情:

代码语言:javascript
复制
SELECT IF(
  (SELECT GROUP_CONCAT(column_name) FROM table_name) IS NOT NULL,
  (SELECT JSON_ARRAY(GROUP_CONCAT(column_name)) FROM table_name),
  NULL
);
EN

回答 1

Database Administration用户

发布于 2021-03-21 18:39:54

我终于找到了解决办法。我使用CONCATGROUP_CONCAT函数创建一个字符串数组,然后将其转换为JSON

代码语言:javascript
复制
SELECT JSON_REPLACE(
    data,
    '$.numbers',
    IF(
      (
        SELECT COUNT(number) FROM numbers
        WHERE JSON_CONTAINS(data, CAST(numbers.id AS CHAR), '$.numbers') = 1
      ) > 0,
      (
        SELECT CAST(CONCAT('[', GROUP_CONCAT(CONCAT('"', number, '"')), ']') AS JSON) FROM numbers
        WHERE JSON_CONTAINS(data, CAST(numbers.id AS CHAR), '$.numbers') = 1
      ),
      NULL
    )
) AS json FROM foo;
票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/287391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档