【问题标题】:Where on hasmany in sequelize with count在hasmany的续集中与计数
【发布时间】:2017-04-25 11:14:47
【问题描述】:

我不是最擅长 UML/数据库图,但以下希望展示我的数据库设计 (MsSQL)

我有一个“位置”表,其中有零到多个与其相关的托盘(一个位置有 0 到多个托盘)。但是,该位置可以是位置 x 或 y 这两种类型之一。此图对其进行了简化,但有许多不同类型的位置,每种类型的字段也非常不同。

我将 Sequelize 用作 ORM,并试图弄清楚如何执行特定查询。我想我很接近但很卡住。

我需要的是:

选择一个 LocationTypeX,其中“活动”为真,并且其对应的 Location 中的托盘少于 10 个。

以前我已经获得了所有“活动”为真的 LocationTypeX。包括位置和托盘(在位置上)并在代码中完成所有操作以确定哪个位置是相关的。然而,这将永远持续下去,因为有成千上万的位置和大量的货盘散布在其中。

我所追求的只是显示位置名称。这就对了。但是与上述条件匹配的位置名称。希望有人可以提供帮助?

目前为止

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 子句。回到第一格

【问题讨论】:

  • 运行 Sql profiler 并检查实际查询
  • @MikhailLobanov 为什么?我目前的查询还很遥远
  • 对不起,我的英语不太好。 “远方”是什么意思?运行命令models.Location.findAll({时没有sql查询?

标签: sql sql-server database sequelize.js


【解决方案1】:

我已经设法用可以在 Sequelize 中使用的原始 SQL 来回答我自己的问题。但是我仍然想知道如何在 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})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 2021-01-10
    • 2016-12-26
    • 2020-08-21
    相关资源
    最近更新 更多