[英]How to get the intersection of 2 mysql queries?
假设我有一个如下所示的MySQL表:
表中的每个作业包含3个任务。
如何获取其taskA
处于Done
状态且taskB
处于“ New
Done
状态的所有JobId
?
就我而言,我想要一个返回qwert
和zxcv
的查询。
我想出了这个查询:
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.