将MySQL“ where”转换为Sequelizejs“ where”

时间:2019-08-06 06:53:39

标签: javascript mysql sequelize.js

我试图编写“ 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,这只是一个例子。

1 个答案:

答案 0 :(得分:1)

您可以为此使用sequelize.wheresequelize.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。表的内容可能是差异,您可以根据查询进行调试和更改