【问题标题】:Unable to Join three Tables having Sum aggregate function using Sequelize libarary无法使用 Sequelize 库连接三个具有 Sum 聚合函数的表
【发布时间】:2018-08-06 19:49:31
【问题描述】:

我正在尝试加入三个表 Organization_entries 和 users 和 user_invoices,我在 sql 中有这样的查询

select users.id ,users.name,users.email, users.mobile, sum(user_invoices.due_amount) , 
       organization_entries.id, organization_entries.created_at  
from users 
INNER JOIN user_invoices ON users.id = user_invoices.customer_id 
INNER JOIN organization_entries on users.id = organization_entries.user_id 
GROUP BY users.id, organization_entries.id 
ORDER BY organization_entries.created_at DESC;

这个查询工作正常,给了我想要的结果,但是当我尝试使用 Sequelize libaray 转换这个查询时,我无法理解如何在 sequelize library 中转换这个查询。

我在 Sequelize 中尝试过类似的东西

db.users
    .findAll({
      where: condition,
      duplicating: false,
      attributes: [
        'id',
        'name',
        'email',
        'mobile',
        'mobileAlternate',
        'image',
        'gender',
        'dob',
        'status',
        [
          db.sequelize.fn(
            'SUM',
            db.sequelize.col('userInvoices.due_amount')
          ),
          'dueAmount'
        ],
      ],
      include: [
        {
          model: db.userInvoices,
          attributes: ['dueAmount'],
        },
        {
          model: db.organizationEntries,
          attributes: ['id', 'fromDate', 'status', 'createdAt'],
          required: true,
          where: playerCondition,
          duplicating: false
        },

      ],
      group: ['users.id', 'organizationEntries.id'],
      order: [['organizationEntries', 'createdAt', 'DESC']],
      offset: pageCondition.startRecord,
      limit: pageCondition.endRecord
    })

但它给了我这个错误
"'字段列表'中的未知列'userInvoices.due_amount'",

这是生成的查询

"SELECT users.* FROM (SELECT users.id, users.name, users.email, users.mobile, @987654@.@3 987654333@ AS mobileAlternate, users.image, users.gender, SUM(userInvoices.due_amount) AS amount, dob.@987654343, @.@8 status FROM users AS users WHERE(users.deleted_at > '2018-02-27 15:22:30' 或 users.deleted_at 为 NULL)GROUP BY @9876543 idorganizationEntries 987654355 @ limit 0,20000)AS users左外连接user_invoices 987654358 @ users 987654360 userInvoices 987654362 @和(customer_id.deleted_at > '2018-02-27 15:22:30' 或 userInvoices.deleted_at 为空)

谁能给我一些提示如何在 Sequelize 中编写此查询。

【问题讨论】:

    标签: mysql node.js express sequelize.js


    【解决方案1】:

    改变

    db.sequelize.col('userInvoices.due_amount')
    

    到:

    db.sequelize.col('user_invoices.due_amount')
    

    【讨论】:

    • attributes: ['dueAmount']更改为attributes: [],然后重试
    • 嘿,我用 sequelize 生成的查询编辑了我的问题。看看这个
    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2021-08-18
    • 1970-01-01
    • 2017-10-27
    • 2017-12-30
    相关资源
    最近更新 更多