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

如何在KTORM中通过Join实现GroupingBy?查询N关联M的数量

KTORM实现多对多关联查询并统计关联数量

对应你给出的SQL,KTORM完全支持连接操作与聚合分组结合使用,具体实现如下:

1. 定义表实体

先根据你的数据库表结构,定义KTORM对应的表对象:

object Ns : Table<Nothing>("N") {
    val id = int("id").primaryKey()
    val name = varchar("name") // 示例字段,根据实际表结构补充
    // 其他字段...
}

object Ms : Table<Nothing>("M") {
    val id = int("id").primaryKey()
    val nId = int("n_id").references(Ns) // 关联N表的外键字段
    // 其他字段...
}

2. 编写查询代码

// 假设database是你的KTORM Database实例
val queryResult = database.from(Ns)
    // 左连接M表,指定关联条件
    .leftJoin(Ms, on = Ns.id eq Ms.nId)
    // 选择N的所有字段,加上M.id的统计数并起别名
    .select(Ns.columns + count(Ms.id).aliased("m_count"))
    // 按N的id分组
    .groupBy(Ns.id)
    // 将查询结果映射为自定义实体(包含统计数量)
    .map { row ->
        // 根据你的实体类结构调整,示例如下:
        NEntity(
            id = row[Ns.id],
            name = row[Ns.name],
            mCount = row.getInt("m_count")
        )
    }

注意事项

  • 如果使用PostgreSQL等严格遵循SQL标准的数据库,需要将N表所有非聚合字段加入分组,此时把groupBy(Ns.id)改为groupBy(*Ns.columns.toTypedArray())即可。
  • 也可以手动指定要查询的N表字段,替代Ns.columns,比如select(Ns.id, Ns.name, count(Ms.id).aliased("m_count")),更灵活控制返回字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:05:14