在 MariaDB 中是否有等效的方法来执行 MySQL 的 JSONOBJECTAGG() ?

问题描述 投票:0回答:1

我为数据项目工作的服务器崩溃了,我现在正在重新创建数据库。我以前使用 MySQL 数据库,现在使用 MariaDB。我以前从未使用过 MariaDB。

之前,我使用以下命令将一些数据从另一个表插入到一个表中:

CREATE TABLE collaborators_list 
SELECT awards.id, awards.researcher_name, awards.organization_id, 
    JSON_OBJECTAGG(awards.fiscal_year, coapplicants.coapplicant_name, 
    coapplicants.organization_number) 
AS 'coapplicants_list' FROM awards 
INNER JOIN coapplicants 
ON awards.id=coapplicants.id 
GROUP BY awards.researcher_name, awards.organization_id;

基本上,我想在 MariaDB 中做同样的事情。我试着看这里: https://mariadb.com/kb/en/library/json-functions/ 但除非我误读了什么,否则这些都不是我真正想要的......

救命!

mysql json database mariadb
1个回答
9
投票

,MariaDB仍然不支持

JSON_ARRAYAGG
JSON_OBJECTAGG
功能。已提出请求此功能的 JIRA 票证:https://jira.mariadb.org/browse/MDEV-16620

现在,来自

JSON_OBJECTAGG()
的文档:

它只需要两个列名或表达式作为参数, 第一个用作键,第二个用作值。

如果任何键名称为 NULL 或参数数量为 ,则会发生错误 不等于 2。

但是,您在

JSON_OBJECTAGG(awards.fiscal_year, coapplicants.coapplicant_name, coapplicants.organization_number)

 中指定了三个参数; 
因此您尝试的查询将无法正常工作

现在,在缺少所需功能的情况下,我们可以将

Group_Concat()

Concat()
 结合使用。我假设您只需要前两个参数(如前一段所述)。

GROUP_CONCAT( DISTINCT CONCAT('"', awards.fiscal_year, '": "', coapplicants.coapplicant_name, '"') SEPARATOR ', ')

注意,如果字符串变得非常非常长,Group_Concat() 可能会截断它。因此,您可以通过在上述查询之前执行以下查询来增加允许的长度: SET SESSION group_concat_max_len = @@max_allowed_packet;

© www.soinside.com 2019 - 2024. All rights reserved.