繁体   English   中英

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

[英]How to get the intersection of 2 mysql queries?

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

在此处输入图片说明

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

如何获取其taskA处于Done状态且taskB处于“ New Done状态的所有JobId

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

我想出了这个查询:

select JobId from MyTable where TaskSeq=0 and TaskState='Done'
intersect
select JobId from MyTable where TaskSeq=1 and TaskState='New';

但是我的MySQL版本不支持拦截运算符。

我的最终目标是用sequelize编写查询。 但是我想我应该首先了解MySQL查询,这样我才能创建一个序列化查询。

而且,我也希望可以在1个函数中完成序列查询,而不是与then串联的多个函数。

这是SQL Fiddle,可以帮助您尝试使用该表。

您可以只使用联接:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM