我目前正在使用3个表,其中使用以下代码来获取获得挂起作业的用户数:
SELECT count(u.user_id) AS nb_users
FROM Users u
LEFT JOIN (
SELECT sj.jobs_userid AS unfinished_user
FROM Scheduled_Jobs sj
LEFT JOIN Last_Update lu
ON lu.update_jobsid = sj.jobs_id
WHERE sj.status = 1
AND sj.date <= CURDATE()
AND lu.update_id IS NULL
) AS uj -- unfinished jobs
ON u.user_id = uj.unfinished_user
WHERE u.status = 1
AND uj.unfinished_user IS NULL
这是一个表格示例:
Users (user_id | email | password | status)
1 | user@asd.com | xxx | 1
2 | user2@asd.com | xxx | 1
3 | user3@asd.com | xxx | 2
4 | user4@asd.com | xxx | 1
5 | user3@asd.com | xxx | 1
Scheduled_Jobs (job_id | user_id | date | points | status)
1 | 1 | 05/09/2019 | 5 | 1
2 | 1 | 05/10/2019 | 3 | 1
3 | 1 | 05/11/2019 | 6 | 1
4 | 1 | 05/12/2019 | 2 | 1
5 | 2 | 07/10/2019 | 7 | 1
6 | 2 | 07/11/2019 | 5 | 1
7 | 2 | 07/12/2019 | 3 | 1
8 | 3 | 10/10/2019 | 4 | 2
9 | 4 | 13/10/2019 | 1 | 1
10 | 4 | 13/11/2019 | 6 | 1
11 | 5 | 15/10/2019 | 5 | 1
12 | 5 | 15/11/2019 | 4 | 1
13 | 5 | 15/12/2019 | 5 | 1
Last_Update (update_id | job_id | status)
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 5 | 1
5 | 8 | 1
6 | 9 | 1
7 | 11 | 1
我有2个问题似乎无法解决。我试图添加一个额外的where子句update_status = 1(似乎破坏了查询..),并且 我还试图显示上一份工作的总分,但我不确定如何实现。
因此,根据上面的示例,我们有4个具有计划作业的活动用户。结果将是(今天)这4个用户中的3个(由于用户2错过了Jobid 6,所以有1,4,5个)没有待处理的任务,它们的总分是12(6 + 1 + 5)。
答案 0 :(得分:0)
在左连接子句中,应该使用AND
在相关的ON子句中添加与左连接表有关的条件。 SELECT sj.jobs_userid AS unfinished_user
FROM Scheduled_Jobs sj
LEFT JOIN Last_Update lu
ON lu.update_jobsid = sj.jobs_id
AND lu.status =1
WHERE sj.status = 1
AND sj.date <= CURDATE()
AND lu.update_id IS NULL
如果为此使用where子句,则它将用作内部联接..