簡體   English   中英

JSON_ARRAY 未在 MariaDB 上發送空列表

[英]JSON_ARRAY not sending an empty list on MariaDB

當我使用JSON_ARRAY function 時,我在 MariaDB (10.3.18) 中遇到問題,如果我的子查詢沒有任何結果,它不會給我一個空數組,它會給我一個包含 1 個 Z307A625ECC64C1Z307A625ECC648 的數組。

示例:

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 function 來解決這個問題的方法,如下所示:

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

但是,如果有什么要告訴 MariaDB 發送一個空結果而不是 NULL 結果它可以幫助我很多!

使用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_AGG function 來構建 JSON。 如果沒有找到可以替換為[]的匹配行,它將返回 NULL :

SELECT COALESCE(JSON_ARRAYAGG(JSON_OBJECT('id', id, 'name', name)), '[]')
FROM t
WHERE active = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM