如何获得2个mysql查询的交集?

时间:2017-09-04 03:23:29

标签: javascript mysql sequelize.js

假设我有一个MySQL表,如下所示:

enter image description here

表中的每个作业都包含3个任务。

如何获取JobId状态为taskADone处于taskB状态的所有New

就我而言,我想要一个返回qwertzxcv的查询。

我想出了这个问题:

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

1 个答案:

答案 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'
    }
});