假设我有一个MySQL表,如下所示:
表中的每个作业都包含3个任务。
如何获取JobId
状态为taskA
且Done
处于taskB
状态的所有New
?
就我而言,我想要一个返回qwert
和zxcv
的查询。
我想出了这个问题:
select JobId from MyTable where TaskSeq=0 and TaskState='Done'
intersect
select JobId from MyTable where TaskSeq=1 and TaskState='New';
但我的MySQL版本不支持intercept运算符。
我的最终目标是在sequelize中编写查询。但我想我应该首先知道MySQL查询,以便我可以创建一个sequlize查询。
我还希望sequlize查询可以在1个函数中完成,而不是与then
连接的多个函数。
以下是帮助您试用该表的SQL Fiddle。
答案 0 :(得分:0)
您可以使用加入:
select mt.JobId
from MyTable mt
join MyTable mt2 on mt2.JobId = mt.JobId
where mt.TaskSeq = 0 and mt.TaskState = 'Done' and mt2.TaskSeq = 1 and mt2.TaskState = 'New'
这是Sequelize对此查询的尝试,但这是猜测。希望它能为您提供一些工作:
MyTable.findAll({
attributes: ['JobId', 'TaskSeq', 'TaskState'],
include: [{
model: MyTable,
attributes: ['JobId', 'TaskSeq', 'TaskState'],
where: {
JobId: Sequelize.col('MyTable.JobId'),
TaskSeq: 1,
TaskState: 'New'
}
}],
where {
TaskSeq: 0,
TaskState: 'Done'
}
});