2017-04-25 62 views
2

sequelize的hasMany我不是在UML /數據庫圖表最好的,但希望下面顯示我的數據庫設計(MSSQL)凡與計數

enter image description here

我有一個「位置」表有0-3許多托盤與它相關聯(在一個位置有0個托盤)。然而,該位置可以是兩種類型中的一種,位置x或y。該圖簡化了它,但是有許多不同類型的位置,並且每種類型的字段都非常不同。

我使用Sequelize作爲ORM,並試圖找出如何執行特定查詢。我認爲我很接近,但相當困難。

我需要的是:

選擇單個LocationTypeX其中「積極」是真實的,並在其相應的位置中有不到10個托盤。

以前我去了,並得到所有LocationTypeX的「active」爲true。包括位置和托盤(位置),並用代碼完成所有工作,以確定哪個位置是相關的。然而,這是永恆的,因爲有成千上萬個地點和大量的貨盤通過它們傳播出去。

我之後所要顯示的位置名稱。這就對了。但是與上述條件匹配的位置名稱。希望有人能幫忙?

到目前爲止,我有

models.Location.findAll({ 
    group: ['Location.id', 'Pallets.id'], 
    attributes: ['Location.id', 'Pallets.id', [models.sequelize.fn('COUNT',models.sequelize.col('Pallets.id')), 'PalletCount']], 
    include: [{ 
    model: models.Pallet, 
    attributes: [] 
    }] 
}).then((ret)=> { 
    console.log(ret); 
}); 

但這並不做「活動」檢查。而且也不會對托盤數量的where子句做任何處理。回到原來的一個

+0

運行SQL事件探查,檢查實際查詢 –

+0

@MikhailLobanov爲什麼呢?我現在的查詢還沒有完成 – MichaelMcCabe

+0

對不起,我的英文不太好。什麼意思是「遙遠」?當你運行命令'models.Location.findAll({'? –

回答

0

我設法回答我自己的問題與原始SQL,我可以在Sequelize中使用。不過我還是很想知道如何做到這一點的Sequelize

models.sequelize.query(
    `SELECT TOP 1 Locations.id, Locations.name FROM LocationTypeX 
    INNER JOIN Locations ON LocationTypeX.LocationId = Locations.id 
    LEFT JOIN Pallets on (Locations.id = Pallets.LocationId) 
    WHERE LocationTypeX.active = 1 
    GROUP BY Locations.id, Locations.name 
    HAVING COUNT(Pallets.id) < 3` 
, { type: models.sequelize.QueryTypes.SELECT})