我试图编写“ WHERE(CASE ... THEN ... ELSE ... END)> 0”以续订v3.33,但找不到解决方案。
曾经尝试过sequelize.literal('...'),但没有用。 使用“ HAVING”是解决方案之一,但对性能而言,对于大数据提取而言并没有好处,而且速度是后者的两倍。
这只是MySQL代码的一个示例,但与我要实现的功能非常接近。
SELECT
(CASE `a`.`fee` IS NULL
THEN `a.b`.`fee`
ELSE `a`.`fee`
END) AS `_fee`
FROM `a`
WHERE
(CASE `a`.`fee` IS NULL
THEN `a.b`.`fee`
ELSE `a`.`fee`
END) > 0 AND
(created_at > currentDate
AND
created_at < futureDate)
我想将其转换为续集。下面是我所能做到的,我不知道如何添加该案例关闭。
models.a.findAll({
...
where: {
created_at: { $gt: startDate, $lt: endDate }
}
})
***不用介意created_at,这只是一个例子。
答案 0 :(得分:1)
您可以为此使用sequelize.where
和sequelize.literal
:
where:{
$and : [
{ created_at: { $gt: startDate, $lt: endDate } },
sequelize.where(sequelize.literal('(CASE `a`.`fee` IS NULL THEN `a.b`.`fee` ELSE `a`.`fee` END)') , { $gt : 0 } )
]
}
注意:这可能不能用作别名
a
。表的内容可能是差异,您可以根据查询进行调试和更改