【问题标题】:Sequelize select with aggregate includes bad attributes => errorSequelize select with aggregate 包含错误属性 => 错误
【发布时间】:2015-04-26 05:30:33
【问题描述】:

模型是 PersonTeam,具有 M:1 关系。

失败的查询:

db.Person.findAll({
    attributes: [ [sequelize.fn('COUNT', sequelize.col('*')), 'count']],
    include: [{model: db.Team, required: true}], // to force inner join
    group: ['team.team_id']
    }).complete(function(err, data) {
        ...
    });

生成的SQL是:

SELECT "person"."person_id", 
       COUNT(*) AS "count", 
       "team"."team_id" AS "team.team_id", 
       "team"."team_name" AS "team.team_name", 
       "team"."team_email" AS "team.team_email",
       "team"."team_lead" AS "team.team_lead" 
FROM "person" AS "person" INNER JOIN "team" AS "team" 
    ON "person"."team_id" = "team"."team_id" 
GROUP BY "team"."team_id";

显然,SELECT 子句中包含的 person.person_id 搞砸了,Postgres 正确地抱怨:

ERROR:  column "person.person_id" must appear in the `GROUP BY` clause or be used in an aggregate function

似乎考虑了attributes 选项,因为COUNT 显示正确,但默认添加SELECT 子句中的所有其余列。

是否有另一种方法(除了attributes)来明确定义哪些列出现在SELECT 子句中,或者这是一个错误?

我正在使用 Sequelize v2.0.3。

【问题讨论】:

    标签: orm inner-join sequelize.js


    【解决方案1】:

    Sequelize 将始终将主键添加到所选字段。目前没有办法禁用它。

    也许按照此处的建议将DISTINCT ON 添加https://stackoverflow.com/a/19723716/800016person_id 可以解决问题?

    否则,请随时在 sequelize 错误跟踪器上打开一个问题

    【讨论】:

    • 这个答案已经过去了几年,“Sequelize 将始终将主键添加到所选字段”是否仍然是真的,并且没有解决方法?
    猜你喜欢
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2016-08-24
    • 2018-11-17
    相关资源
    最近更新 更多