【发布时间】:2015-04-26 05:30:33
【问题描述】:
模型是 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";
显然,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