You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MariaDB中合并重复SQL行,聚合用户关联权限ID

解决方案:合并用户权限为逗号分隔字符串(MariaDB + jOOQ适配)

正确的MariaDB SQL语句

你需要结合GROUP_CONCAT和GROUP BY,对用户的唯一属性进行分组,才能正确聚合同一用户的权限ID:

SELECT 
    users.id, 
    users.name, 
    users.description, 
    GROUP_CONCAT(users_principles.principleId ORDER BY users_principles.principleId SEPARATOR ', ') AS PRINCIPLES
FROM users
JOIN users_principles ON users_principles.userId = users.id
WHERE users.id > 0
GROUP BY users.id, users.name, users.description;
  • GROUP_CONCAT中的ORDER BY是可选配置,用于保证权限ID按有序排列;SEPARATOR显式指定分隔符,默认值为逗号,这里写出更便于维护。
  • 必须将users.id、users.name、users.description全部加入GROUP BY,确保每个分组对应唯一用户(MariaDB严格模式下要求非聚合字段必须在GROUP BY中,避免返回结果异常)。

jOOQ适配写法

对应jOOQ的实现代码如下(假设已生成表实体类):

Result<Record4<Long, String, String, String>> result = dslContext
    .select(
        USERS.ID,
        USERS.NAME,
        USERS.DESCRIPTION,
        DSL.groupConcat(USERS_PRINCIPLES.PRINCIPLEID)
            .orderBy(USERS_PRINCIPLES.PRINCIPLEID)
            .separator(", ")
            .as("PRINCIPLES")
    )
    .from(USERS)
    .join(USERS_PRINCIPLES).on(USERS_PRINCIPLES.USERID.eq(USERS.ID))
    .where(USERS.ID.gt(0))
    .groupBy(USERS.ID, USERS.NAME, USERS.DESCRIPTION)
    .fetch();

这段代码会生成与上述SQL等价的查询逻辑,完全适配你的需求。

内容的提问来源于stack exchange,提问作者Stepping Traveler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:06:30