这一直在踢我的屁股......
所以我有桌子工作:
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确实为另一个用户分配了"活动"作为状态我不想表明那个。
提前多多感谢。
答案 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')