1

当我使用 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 结果,它会对我有很大帮助!

4

1 回答 1

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

于 2019-10-19T09:40:44.563 回答