假设我有一个如下所示的 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 查询。
而且我还希望序列化查询可以在 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'
}
});
关于javascript - 如何获得2个mysql查询的交集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46029882/