javascript - Sequelize - 无法绑定(bind)多部分标识符 XXX

标签 javascript sql node.js sql-server sequelize.js

我正在尝试在 Sequelize with SQL Server 中使用 order 选项运行查询。我已经阅读了 SO 中的一些示例,但是在 Sequelize 上运行查询时我没有找到解决方案。

let order = [["winner","new_apv","asc"]];

 const include = [
    {
      model: Item_Supplier,
      as: "itemSupplier",
      attributes: ["id", "supplierOrderId", "cost"],
      include: [
        {
          model: Supplier,
          as: "supplier"
        }
      ]
    },
    {
      model: Winner,
      as: "winner",
      attributes: ["supplierId", "new_apv"],
      include: [
        {
          model: Supplier,
          as: "supplier",
          attributes: ["supplierName"]
        }
      ]
    }
  ];

 await Item.findAll({include,order})

这是错误信息

The multi-part identifier "winner.new_apv" could not be bound.



这是 Sequelize 生成的 SQL Server 查询:
SELECT [item].*, [itemSupplier].[id] AS 
[itemSupplier.id], [itemSupplier].[supplierOrderId] AS 
[itemSupplier.supplierOrderId], [itemSupplier].[cost] AS 
[itemSupplier.cost], [itemSupplier->supplier].[id] AS 
[itemSupplier.supplier.id], [itemSupplier->supplier].[supplierName] AS 
[itemSupplier.supplier.supplierName], [itemSupplier->supplier].[duns] AS 
[itemSupplier.supplier.duns] 
FROM (SELECT [item].[id], [item].[item_price], [item].[common_code], [item].[uom], [item].[usage_per_item], [item].[apv], 
[item].[impac_commodity], [item].[mfgname], [item].[mtr_grp_desc], [item].[description], [item].[comments], [item].[renewed_2019],
[item].[currency], [item].[contractId], [item].[mtrId], [item].[allocationId], [winner].[id] AS [winner.id], 
[winner].[supplierId]
 AS [winner.supplierId], [winner].[new_apv] 
 AS [winner.new_apv], [winner->supplier].[id]
 AS [winner.supplier.id], [winner->supplier].[supplierName]
 AS [winner.supplier.supplierName] FROM [items] AS [item] 
 INNER JOIN [winners] AS [winner] 
 ON [item].[id] = [winner].[itemId] 
 AND [winner].[deletedAt] IS NULL 
 INNER JOIN [suppliers] AS [winner->supplier] 
 ON [winner].[supplierId] = [winner->supplier].[id]
 WHERE ([item].[deletedAt] IS NULL AND ([item].[contractId] = 4 AND [item].[renewed_2019] LIKE N'YES%'))
 ORDER BY [item].[id] OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY) AS [item] LEFT OUTER JOIN [item_suppliers] AS [itemSupplier]
  ON [item].[id] = [itemSupplier].[itemId] AND ([itemSupplier].[deletedAt] IS NULL) LEFT OUTER JOIN [suppliers] 
  AS [itemSupplier->supplier] ON [itemSupplier].[supplierId] = [itemSupplier->supplier].[id] ORDER BY [winner].[new_apv]  ASC;

最佳答案

使用 Sequelize 文字并在文字本身中添加单引号就可以了。

order = [[Sequelize.literal('"winner.new_apv"'), desc ? "DESC" : "ASC"]];

关于javascript - Sequelize - 无法绑定(bind)多部分标识符 XXX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56589335/

相关文章:

node.js - 如何使用 NodeJs (typescript) 和 Sequelize 5 (PostgreSQL) 进行单元测试?

node.js - xcode-选择 : error: tool 'xcodebuild' requires Xcode

javascript - 如何在 Typescript 界面中强制使用分号

node.js - 使用 mocha 测试异步/等待时使用 done() 的正确方法

javascript - 将 draw.io 图渲染为 png

mysql - 记录零计数记录的聚合查询的名称是什么?

sql - '-' 附近的语法不正确。(Microsoft SQL Server Native Client 10.0)

php - 附加 where 子句

javascript - 带有 ImageMagick 的 Node.js,为什么服务器没有被阻止?

javascript - 更改数据表中ajax请求中下拉菜单的选择选项