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

如何用Sequelize实现含聚合子查询的JOIN查询

解决方案

要实现你需要的JOIN聚合子查询的SQL,不能直接用默认的include关联Two模型,需要手动定义一个虚拟的子查询表进行关联,具体代码如下:

models.One.findAll({
  include: [
    {
      // 定义匹配子查询结果结构的虚拟模型
      model: models.sequelize.define('table_two', {
        count: models.DataTypes.INTEGER,
        two_id: models.DataTypes.INTEGER
      }, { timestamps: false }),
      as: 'table_two',
      required: true, // 对应SQL中的INNER JOIN
      // 指定JOIN关联条件
      on: models.sequelize.where(
        models.sequelize.col('one.two_id'),
        '=',
        models.sequelize.col('table_two.two_id')
      ),
      attributes: [], // 不需要返回虚拟表的字段(按需调整)
      // 配置数据源为聚合子查询
      from: [
        models.Sequelize.literal(`(SELECT COUNT(*) AS count, two_id FROM two GROUP BY two_id) AS table_two`)
      ]
    }
  ],
  subQuery: false, // 强制生成JOIN语法,避免嵌套子查询,符合性能要求
  raw: true // 可选:若需要返回原始数据而非模型实例则开启
});

关键说明

  • 虚拟模型table_two仅用于匹配子查询的字段结构,无需实际建表
  • from字段通过literal直接嵌入你需要的聚合子查询SQL
  • subQuery: false是核心配置,确保Sequelize生成你期望的JOIN形式而非嵌套子查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:25:48