微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sequelize 在使用限制和偏移量与“group and order by”和“include”破坏 sql

如何解决Sequelize 在使用限制和偏移量与“group and order by”和“include”破坏 sql

无限制或偏移的 Sequelize 查询生成sql

SELECT [abc].[abcid],sum([qty]) AS [abcQty] 
FROM [AS_AS_XYZ] AS [xyz] 
LEFT OUTER JOIN [AS_AS_ABC] AS [abc] ON [xyz].[abcRef] = [abc].[id] 
WHERE [xyz].[aRef] = N'1' 
      AND [xyz].[bRef] = N'1' 
GROUP BY [abc].[abcid] 
ORDER BY abcQty DESC

但是,当将限制或偏移量添加到 sequelize 查询时,查询会在 xyz.id添加一个 order by 子句

SELECT [abc].[abcid],sum([qty]) AS [abcQty] 
FROM [AS_AS_XYZ] AS [xyz] 
LEFT OUTER JOIN [AS_AS_ABC] AS [abc] ON [xyz].[abcRef] = [abc].[id] 
WHERE [xyz].[aRef] = N'1' 
      AND [xyz].[bRef] = N'1' 
GROUP BY [abc].[abcid] 
ORDER BY abcQty DESC,[xyz].[id] 
OFFSET 10 ROWS 
FETCH NEXT 10 ROWS ONLY;

导致错误

列 xyz.id 在 ORDER BY 子句中无效,因为它不包含在聚合函数或 GROUP BY 子句中

而预期的结果是

SELECT [abc].[abcid],sum([qty]) AS [abcQty] 
FROM [AS_AS_XYZ] AS [xyz] 
LEFT OUTER JOIN [AS_AS_ABC] AS [abc] ON [xyz].[abcRef] = [abc].[id] 
WHERE [xyz].[aRef] = N'1' 
      AND [xyz].[bRef] = N'1' 
GROUP BY [abc].[abcid] 
ORDER BY abcQty DESC 
OFFSET 10 ROWS 
FETCH NEXT 10 ROWS ONLY;

这将在 abc.abcid 上的分组结果集上生成分页结果。

有没有办法提示 Sequelize 在添加偏移量和限制时不要在 xyz.id 上包含 order by 子句?

这是代码:(从较大的代码提取,所以如果这里或那里有错别字,请原谅我,但它几乎就是那里的内容并产生前面所述的 sql

let query = {};
query.attributes = [
      'abc.abcid',[sequelize.fn('sum',sequelize.col('qty')),'abcQty'],];
   
query.group = ['abc.abcid'];
query.raw = true;
query.where.aRef = 1;
query.where.bRef = 1;
query.order = sequelize.literal('abcQty DESC');
query.include = [{ model: sequelize.models['abc'],attributes: [] }];
query.limit = 10;
query.offset = 10;


let data= await sequelize.models['xyz'].findAndCountAll(query);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。