Sql 根据另一个表的值显示结果
这一直在踢我的屁股 所以我有一份工作:Sql 根据另一个表的值显示结果,sql,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 最后,一个多对多用户的任务 id | user_id | job_id | status 1 | 1 | 1
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
最后,一个多对多用户的任务
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确实有另一个用户被指定为“活动”状态,因此我不想显示该用户
非常感谢。使用
不存在
操作符过滤活动
记录。试试这个
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
使用子查询
SELECT * FROM user_job
WHERE status = 'canceled' AND job_id NOT IN
(SELECT job_id FROM user_job WHERE status='active')