2017-04-25 46 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})