2017-09-04 38 views
0

假設我有一個MySQL表看起來像這樣:如何獲得2個mysql查詢的交集?

enter image description here

表中的每個作業包含3個任務。

我怎樣才能得到所有JobId(胡)的taskADone狀態和taskBNew狀態?

在我的情況下,我想要一個查詢返回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查詢,以便我可以創建一個sequizeize查詢。

我也希望sequizeize查詢可以在1個函數中完成,而不是與then連接的多個函數完成。

這是SQL Fiddle來幫助您嘗試表格。

+0

你能做一個'union all'嗎? –

回答

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

謝謝。這工作。但是我需要把它寫成續集。你知道如何實現它嗎? – Brian

+0

我已經更新了猜猜問題的問題。 – gcaton