JSON_ARRAY 未在 MariaDB 上发送空列表

Posted

技术标签:

【中文标题】JSON_ARRAY 未在 MariaDB 上发送空列表【英文标题】:JSON_ARRAY not sending an empty list on MariaDB 【发布时间】:2020-02-15 07:31:10 【问题描述】:

当我使用 JSON_ARRAY 函数时,我在 MariaDB (10.3.18) 中遇到问题,如果我的子查询没有任何结果,它不会给我一个空数组,它会给我一个包含 1 个空结果的数组.

示例:

SELECT JSON_ARRAY() // -> [] this is what I want to obtain

SELECT JSON_ARRAY((
    SELECT GROUP_CONCAT(
        JSON_OBJECT(
            'id', id,
            'name', name
        )
    )
    FROM user
    WHERE user.acive = TRUE
)) // -> [null] If I don't have any result

目前我找到了一种方法来解决这个问题,方法是使用这样的REPLACE 函数:

SELECT REPLACE(JSON_ARRAY(null), "[null]", "[]")

但如果有什么东西可以告诉 MariaDB 发送一个空结果而不是 NULL 结果,那对我有很大帮助!

【问题讨论】:

mysql 版本?? 我的错:这是 MariaDB 10.3.18(不是 MySQL)我编辑了我的问题 【参考方案1】:

使用IFNULL的选项:

SELECT
  IFNULL(
    (SELECT
      CONCAT('[', GROUP_CONCAT(
        JSON_OBJECT(
          'id', `user`.`id`,
          'name', `user`.`name`
        )
      ), ']')
    FROM `user`
    WHERE `user`.`active` = true),
    JSON_ARRAY()
  );

见dbfiddle。

【讨论】:

以上是关于JSON_ARRAY 未在 MariaDB 上发送空列表的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 未在 XAMPP 和 HeidiSQL 上启动

Paypal IPN 未在沙盒上发送/接收

信息未在 viewDidLoad 上发送到 Apple Watch

Spring Boot flash 属性未在 Azure 上发送

邮件未在 rails 上使用 devise、heroku 和邮戳发送

Flutter 位置流未在 Android Wear 2 上发送 gps 更新