2016-08-18 48 views
0

完成的任務,這些都是我的表: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

回答

1

移動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