模型为Person
和Team
,关系为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。
答案 0 :(得分:0)
Sequelize将始终将主键添加到所选字段。目前没有办法禁用它。
或许按此https://stackoverflow.com/a/19723716/800016 DISTINCT ON
向person_id
添加{{1}}可以解决问题?
否则,请随时在sequelize bug tracker上打开一个问题