根据另一个表的值显示结果

时间:2015-02-07 02:24:00

标签: sql

这一直在踢我的屁股......

所以我有桌子工作:

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

最后,多对多的user_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确实为另一个用户分配了"活动"作为状态我不想表明那个。

提前多多感谢。

2 个答案:

答案 0 :(得分: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 

答案 1 :(得分:1)

使用子查询

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