2013-01-03 166 views
0
  • 任務; id
  • task_assign; id,task_id
  • task_state; id,assign_id
  • states; ID,STATE_ID,在其他表

    檢查是否存在另一個表中的記錄

    SELECT DISTINCT t.id,t.* FROM tasks AS t 
    INNER JOIN task_assign AS ta1 ON ta1.task_id=t.id 
    INNER JOIN task_state AS ts1 ON ts1.assign_id=ta1.id 
    INNER JOIN states AS s1 ON s1.id=ts1.state_id AND s1.define_id=14 
    INNER JOIN task_assign AS ta2 ON ta2.task_id=t.id 
    INNER JOIN task_state AS ts2 ON ts2.assign_id=ta2.id 
    INNER JOIN states AS s2 ON s2.id=ts2.state_id AND s2.define_id=21 
    . 
    . 
    . 
    INNER JOIN task_assign AS ta5 ON ta5.task_id=t.id 
    INNER JOIN task_state AS ts5 ON ts5.assign_id=ta5.id 
    INNER JOIN states AS s5 ON s5.id=ts5.state_id AND s5.define_id=25 
    

    這個作品define_id

enter image description here

我要包含在選定的ID,但乘以請求時,它放緩。有另一種方法嗎?

+2

你能澄清你要求的是什麼嗎?從我可以告訴你想要的任務ID存在於所有表中?另外,爲什麼會這樣?:'SELECT DISTINCT t.id,t。*'你知道't。*'已經包含't.id'了嗎? – 2013-01-03 07:15:11

+0

爲什麼你多次加入同一張表?有什麼具體原因嗎? –

+0

添加樣本輸入數據並輸出您想要的結果 –

回答

2
SELECT 
    t.id 
FROM 
    tasks t 
INNER JOIN 
    task_assign ta1 
    ON ta1.task_id = t.id 
INNER JOIN 
    task_state ts1 
    ON ts1.assign_id = ta1.id 
INNER JOIN 
    states s1 
    ON s1.id = ts1.state_id 
    AND s1.define_id IN (14,25) 
GROUP BY 
    t.id 
HAVING 
    COUNT(DISTINCT s1.define_id) = 2 

編輯 - 解釋到OP這是什麼呢? 這首先會檢索所有記錄中,其中define_id是14或25,但HAVING子句將只允許查詢返回那些誰都。

+0

這是好的,但它應該有相同的時間其他ID。 's1.define_id IN(14,25)'這說的是「或者」14或25.我想要14並且有25的時間。 –

+0

這樣做 - 看'HAVING'子句... – 2013-01-03 07:46:49

+0

好的。對不起,它現在的作品:) –

相關問題