2015-02-07 167 views
0

這已經踢了我的屁股......顯示結果

所以,我有表工作:

id | date  | time 
1 | 02-10-2015 | 8:00 
2 | 02-11-2015 | 8:00 
3 | 02-12-2015 | 8:00 
4 | 02-13-2015 | 8:00 

然後,用戶:

id | name 
1 | John 
2 | Mary 
3 | Darius 

而且最後,一個多對多的用戶_job

id | user_id | job_id | status 
1 | 1  | 1 | canceled 
2 | 2  | 1 | active 
3 | 3  | 3 | active 
4 | 2  | 4 | canceled 

我試圖運行一個查詢,它將返回取消的只有時,沒有另一個人分配。

所以在它上面提出將只返回作業4的數據的情況下,由於作業1有一個人主動分配

SELECT 
     user_job.user_id, 
     job.id as job_id, 
     user_job.status 
FROM job inner JOIN user_job ON (job.id = user_job.job_id) 
WHERE homekeeper_jobs.state != 'active' 

將返回:

user_id | job_id | status 
    1  | 1 | canceled 
    2  | 4 | canceled 

由於作業1確實有其他用戶分配爲「主動」作爲狀態,我不想表明這一點。

非常感謝。

回答

1

使用子查詢

SELECT * FROM user_job 
WHERE status = 'canceled' AND job_id NOT IN 
(SELECT job_id FROM user_job WHERE status='active') 
1

使用Not exists運算符來篩選active記錄。嘗試這個。

SELECT * 
FROM user_job u 
     JOIN (SELECT j.id AS job_id 
      FROM job j 
      WHERE NOT EXISTS (SELECT 1 
           FROM user_job uj 
           WHERE j.id = uj.job_id 
             AND uj.status = 'active')) a 
     ON a.job_id = u.job_id