我试图根据不同的参数在关联表中获取两个记录计数:
// Models
var Customer = sequelize.define('Customer', {
name: DataTypes.STRING,
});
var Invoice = sequelize.define('Invoice', {
invoiceRef: DataTypes.STRING,
status: {
type: DataTypes.ENUM,
values: ['UNPAID', 'PAID'],
defaultValue: 'UNPAID'
},
isArchived: {
type: DataTypes.BOOLEAN,
defaultValue: false
},
});
Invoice.associate = function(models) {
Invoice.belongsTo(models.Customer);
}
Customer.associate = function (models) {
Customer.hasMany(models.Invoice);
}
// Query
Customer.findAll({
attributes: {
include: [
[models.Sequelize.fn("COUNT", models.Sequelize.fn("DISTINCT", models.Sequelize.col("Invoices.id"))), "totalInvoices"],
[models.Sequelize.fn("COUNT", models.Sequelize.fn("DISTINCT", models.Sequelize.col("UnpaidInvoices.id"))), "unpaidInvoices"]
]
},
include: [
{
model: models.Invoice,
where: { isArchived: false },
attributes: [],
required: false
},
{
model: models.Invoice,
where: { isArchived: false, status: 'UNPAID' },
attributes: [],
required: false
},
],
group: ['Customer.id']
})问题是,当多次包含同一个关联表时,Sequelize为SQL查询中的两个表实例分配相同的名称:
左加入
Invoices作为InvoicesONCustomer.id=Invoices.CustomerId和Invoices.isArchived=0 左侧以Invoices形式加入InvoicesONCustomer.id=Invoices.CustomerId和Invoices.isArchived=0和Invoices.status= 'UNPAID‘
是否有任何方式为查询中的联接表指定不同的名称?例如:
左加入
Invoices作为InvoicesONCustomer.id=Invoices.CustomerId和Invoices.isArchived=0 左外加入UnpaidInvoicesONInvoicesASCustomer.id=Invoices.CustomerId和Invoices.isArchived=0和Invoices.status=‘un期’
发布于 2018-09-21 22:32:02
我通常只加入一次,然后在SUM中使用一个SUM语句,而不是使用COUNT --所有的行都是连接的,这就是为什么对两者都是相同的。
attributes: {
include: [
// count paid using case/sum via `status` != 'UNPAID'
[ sequelize.fn('sum', sequelize.literal("CASE WHEN (`Invoices`.`status` != 'UNPAID' THEN 1 ELSE 0 END")), 'paid_count' ],
// count unpaid using case/sum via `status` = 'UNPAID'
[ sequelize.fn('sum', sequelize.literal("CASE WHEN (`Invoices`.`status` = 'UNPAID' THEN 1 ELSE 0 END")), 'unpaid_count' ],
],
// ...
},https://stackoverflow.com/questions/52431579
复制相似问题