实际上,我自己找到了解决方案。我认为这是sequelize框架中的错误。
在node_modules / sequelize / lib / dialect / abstract /
query_generator.js中,有一个“ selectQuery”函数,其内容如下:
subQuery = limit && (options.hasIncludeWhere || options.hasIncludeRequired || options.hasMultiAssociation) && options.subQuery !== false
首先,有一个选项subQuery可以作为false传递,以删除子查询的生成。Sequelize文档对此一言不发。但是此外,如果您在findAll对象中传递subQuery:false,则它将无法正常工作,因为由于某种原因,它对selectQuery函数的定义不够完善。
我尝试了类似的东西:
return models.property.findAll({ where: ["price>=?", 300000], include: [ { model:models.entity_area, where: { area_id:1 } } ], limit:12, subQuery:false})仍然有options.subQuery = undefined。
所以我不得不将query_generator.js中的函数更改为类似以下内容:
subQuery = limit && (options.hasIncludeWhere || options.hasIncludeRequired || options.hasMultiAssociation) && options.subQuery !== false && options.doSubQuery===true
So now by default it’s not doing this ugly subquery unless i specify
explicitely doSubQuery:true. And finally i got the proper query without
subquery with limit.



