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 (将#修改为@)