我想實現一個簡單的查詢應該是這樣的:Sequelize用的NodeJS不能加入表與限制
select * from property join entity_area on property.id=entity_area.entity_id and entity_area.area_id=1 where property.price>300000 limit 12
很簡單:我想要得到的加入結果,然後以限制12.
在Sequelize我使用下列的函數:
return models.property.findAll(
{
where: ["price>=?", 300000],
include: [
{
model:models.entity_area,
where: { area_id:1 }
}
],
limit:12
})
但這代碼生成以下SQL:
select property.*, entity_area.* from (select * from property where property.price>300000 limit 12) join entity_area on property.id=entity_area.entity_id and entity_area.area_id=1
它與我想要做的完全不同的邏輯,因爲在生成的sql中它首先得到任何12個結果,然後嘗試與entity_area結合,當然隨機12結果不一定匹配entity_area,所以我沒有得到任何結果。
請給我一個正確的做法。屬性表非常龐大,我必須使用「限制」而不是獲取所有結果並在javascript中對其進行切片。我也不想開始使用原始查詢。
https://github.com/sequelize/sequelize/blob/master/lib/dialects/abstract/query-generator.js#L876 代碼看起來有點不同,這些天所以'選項.subQuery = false'應該簡單地工作。 – 2015-05-21 05:34:41
@MickHansen這也解決了我的問題,但我有點擔心,因爲這不在Sequelize的文檔中。依靠它可以安全嗎? – 2016-02-26 19:08:23
很好的答案,它的工作,謝謝 – 2017-12-01 10:05:48