SQL查询来标记从一个特定的用户

问题描述:

完成的任务,这些都是我的表:SQL查询来标记从一个特定的用户

表任务

id label 
---------- 
1 Task 1 
2 Task 2 
3 Task 3 
4 Task 4 
5 Task 5 
6 Task 6 
7 Task 7 
7 Task 8 

表user_tasks

id id_user id_task 
------------------ 
1  1  1 
2  1  2 
3  1  4 
4  2  1 
5  3  1 

我有这个疑问,我认为是工作:

SELECT t.id, t.label as text, IF(u.id_user IS NULL, 0, 1) as done 
      FROM tasks AS t 
      LEFT JOIN user_tasks AS u ON t.id = u.id_task 
      WHERE u.id_user = 1 
       OR u.id_user IS NULL 
      ORDER BY id DESC 

所以,如果我运行该查询,我得到这个成功的响应:

id text done 
---------------- 
8 Task 8 0 
7 Task 7 0 
6 Task 6 0 
5 Task 5 0 
4 Task 4 1 
3 Task 3 0 
2 Task 2 1 
1 Task 1 1 

但如果我把另一个用户ID不具有任何的任务尚未完成,例如像5我得到这样的结果:

id text done 
---------------- 
8 Task 8 0 
7 Task 7 0 
6 Task 6 0 
5 Task 5 0 
3 Task 3 0 

因此,所有的任务,减去已经为user_tasks表上的不同用户设置的任务。

我在做什么错? 谢谢!

+0

你使用MySQL或MS SQL Server删除WHERE条款(包括u.id_user IS NULL。)? (不要标记没有涉及的产品。) – jarlh

+0

MySql,我没有阅读它指定它只是MS的sql服务器描述。我删除它。对不起,关于该 – Jan

+2

如果你移动'u.id_user = 1'到'ON'子句,你可以删除'WHERE'子句(包括'u.id_user IS NULL') – jarlh

移动u.id_user = 1ON条款,并

SELECT t.id, t.label as text, IF(u.id_user IS NULL, 0, 1) as done 
FROM tasks AS t 
    LEFT JOIN user_tasks AS u ON t.id = u.id_task AND u.id_user = 1 
ORDER BY id DESC 
+0

好吧,必须等待4分钟接受。谢谢! – Jan

+1

说实话,我甚至都没有看到问题描述,只是发现条件没有妥当放置。 – jarlh