[42883] ERROR: function string_agg(text) does not exist
时间: 2024-04-11 21:28:29 浏览: 138
agg2.zip_High Fidelity_agg_graphics engine
抱歉,KINGBASE数据库不支持内置的`STRING_AGG`函数。在KINGBASE数据库中,您可以使用`LISTAGG`函数来实现类似的功能。以下是修改后的查询语句:
```sql
SELECT r.id, r.name, r.role_level, r.is_del,
LISTAGG(rm.menu_id, ',') WITHIN GROUP (ORDER BY rm.menu_id) AS menuIds,
CONCAT(
'[',
LISTAGG(
CONCAT('{"userId":', ur.user_id, ',"name":"', du.user_name, '","mobile":"', mobile, '"}'),
','
) WITHIN GROUP (ORDER BY ur.user_id),
']'
) AS userIds
FROM role r
LEFT JOIN role_menus rm ON rm.role_id = r.id
LEFT JOIN user_roles ur ON ur.role_id = rm.role_id
LEFT JOIN djd_user du ON ur.user_id = du.user_id
WHERE r.id = 1678361105340755969
GROUP BY r.id, r.name, r.role_level, r.is_del;
```
在这个修改后的查询中,我们使用了`LISTAGG`函数来替代`GROUP_CONCAT`。对于`menuIds`列,我们使用`LISTAGG`函数将`rm.menu_id`列的值以逗号分隔的形式进行合并。对于`userIds`列,我们使用`LISTAGG`函数将构造的JSON对象以逗号分隔的形式进行合并。注意,在使用`LISTAGG`函数时,我们还指定了排序规则(`WITHIN GROUP (ORDER BY ...)`)来确保结果的顺序正确。
请注意,KINGBASE数据库的语法可能与标准的MySQL语法略有不同,因此需要根据实际情况进行调整。请确保在运行该查询之前,已经连接到KINGBASE数据库。
阅读全文