sequelize.js - 续集嵌套条件
问题描述
select * from courses where (days like '%a%' or days like '%b%') and (startTime <= 9 and 9 < endTime) OR (10 >= startTime and 10 <= endTime)
这是我想用 sequelize 写的 sql
这就是我写的
const result = await models.courses.findAll({
where: {
[op.or]: [
{
days: { [op.like]: '%a%' },
},
{
days: { [op.like]: '%b%' },
},
],
[op.or]: [
{
[op.and]: [
{
startTime: { [op.lte]: 9 },
},
{
endTime: { [op.gte]: 9 },
},
],
},
{
[op.and]: [
{
startTime: { [op.lte]: 10 },
},
{
endTime: { [op.gte]: 10 },
},
],
},
],
},
});
但结果显示...
从课程中选择 ... WHERE (( courses
. startTime
<= 9 AND courses
. endTime
>= 9) OR ( courses
. startTime
<= 10 AND courses
. endTime
>= 10));
从一开始我的天数查询发生了什么?
解决方案
您缺少包含天数部分和开始时间/结束时间部分的顶级“与”。奇怪的是您没有收到错误 - 也许开始时间/结束时间部分覆盖了天数部分。
稍后添加:测试确认第二个子句将覆盖第一个子句。例如
where : {
[Op.or] : [{id : 1},{id : 2}], // 1st clause
[Op.or] : [{id : 3},{id : 4}] // 2nd clause
}
结果只
WHERE id = 3 OR id = 4
需要有一个操作数连接两个 OR 子句....
推荐阅读
- latex - Latex biblatex:参考书目标题没有换行,而是溢出[]
- swift - 为什么将 void 分配给局部变量
- python - Discord Bot 无法离开语音通道“NoneType”对象没有属性“断开连接”
- mp4 - 非 IDR IFrame 的意义是什么?
- javascript - 未定义 member.voiceChannel
- html - 如何在固定导航中放置标题?
- watchkit - 如何解除使用 contextForSegue 呈现的 WKInterfaceController?
- php - 配置 PhpStorm、Xdebug 和 Laravel
- javascript - 在 Flask 应用程序中将变量从后端传递到前端
- javascript - 不允许 2 个视频同时播放