我不能使用在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函数的最有效方法是什么?我想避免这样的事情:
SELECT IF(
(SELECT GROUP_CONCAT(column_name) FROM table_name) IS NOT NULL,
(SELECT JSON_ARRAY(GROUP_CONCAT(column_name)) FROM table_name),
NULL
);发布于 2021-03-21 18:39:54
我终于找到了解决办法。我使用CONCAT和GROUP_CONCAT函数创建一个字符串数组,然后将其转换为JSON。
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;https://dba.stackexchange.com/questions/287391
复制相似问题