我试图向子查询添加一个 where 子句,但出现以下错误。我试图做的事情是不可能的吗?
Error: Support for literal replacements in the `where` object has been removed.
models.Message.findAll({
attributes: ['createdAt', 'content',
[
sequelize.literal(`
RANK() OVER (
PARTITION BY DATE_FORMAT('createdAt', '%Y-%m-%d')
ORDER BY createdAt DESC
)`),
'ranked',
]],
where: [sequelize.literal('ranked') <= 3]
})
作为引用,这是我尝试在sequelize 中复制的工作MySql 查询。
SELECT * FROM (
SELECT
createdAt,
content,
RANK() OVER (
PARTITION BY DATE_FORMAT(`createdAt`, '%Y-%m-%d')
ORDER BY createdAt DESC
) AS ranked
FROM
communication_hub.Messages
ORDER BY createdAt DESC
) AS messages
WHERE ranked <= 3;
最佳答案
我想你应该使用 sequelize.where
将 sequelize.literal
与某些条件结合起来:
where: sequelize.where(sequelize.literal('ranked'), '<=', 3)
关于sequelize.js - Sequelize : applying a where clause to a subquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64775013/