在mariadb中有没有一种等效的方法来实现mysql的jsonobjectagg()呢?

blpfk2vs  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(419)

我为一个数据项目工作的服务器崩溃了,我现在正在重新创建数据库。我以前在用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/ 但除非我误读了什么,否则这些都不是我真正想要的。。。
救命啊!

z0qdvdin

z0qdvdin1#

不,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 ', ')

请注意,如果字符串变得非常长,groupconcat()可能会将其截断。因此,您可以通过在上述查询之前执行以下查询来增加允许的长度:

SET SESSION group_concat_max_len = @@max_allowed_packet;

相关问题