Sequelize select with aggregate包括bad attributes =>错误

时间:2015-02-24 14:28:41

标签: orm inner-join sequelize.js

模型为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";

显然,person.person_id条款中包含的SELECT将其搞砸了,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。

1 个答案:

答案 0 :(得分:0)

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

或许按此https://stackoverflow.com/a/19723716/800016 DISTINCT ONperson_id添加{{1}}可以解决问题?

否则,请随时在sequelize bug tracker上打开一个问题