在Query中需要帮助以检查任务是否由其他用户完成

时间:2016-06-20 06:27:45

标签: mysql sql

我在数据库任务,用户和数据库中有3个表。 assignedTo。

任务包含由管理员创建的任务的信息,用户是用户列表和用户列表。 assignedTo包含有关将哪个任务分配给哪个用户的信息。

我需要在'assignedTo'表上查询,以显示在其仪表板上分配给用户的任务列表。问题是将单个任务分配给多个用户,并且可能的任务可能由其中一个完成。因此,我需要显示处于“打开状态”的任务,而不是由指定列表中的任何人完成的任务。 下面是'assignedTo'表的结构:

--------------------------------
| id | taskId | userId | status|
--------------------------------
| 1  |  1     | 1      | open  |  
| 2  |  1     | 2      | open  |
| 3  |  1     | 3      | open  |
| 4  |  1     | 4      | open  |
| 5  |  2     | 1      | open  |
| 6  |  2     | 2      | close |
| 7  |  3     | 1      | open  |
| 8  |  3     | 2      | open  |
--------------------------------

因此,根据上述数据,任务1显示在用户1,2,3& 4仪表板,因为它们没有被任何一个关闭。 任务2显示在没有人的Dash上,因为它被用户2关闭。 类似地,任务3显示在用户1& 2 Dash因为它们都是开放的。

我试图将同一个表连接到它自己但未能执行。

SELECT * FROM assignedTo as a1
JOIN assignedTo as a2 ON a2.taskId = a1.taskId AND a2.userId != 1 AND a2.status == 'open' 
WHERE a1.userId = 1 AND a1.status = 'open'

如果可能,请帮助查询。

3 个答案:

答案 0 :(得分:2)

您可以使用not in和subselect

select * 
from  assignedTo 
where taskid not in (select distinct taskid 
                      from assignedTo 
                       where status = 'close');

答案 1 :(得分:1)

您可以使用NOT EXISTS

SELECT *
FROM assignedTo a1
WHERE NOT EXISTS(
    SELECT 1
    FROM assignedTo a2
    WHERE
        a2.taskId = a1.taskId
        AND a2.status = 'close'
)

ONLINE DEMO

答案 2 :(得分:1)

或者您可以使用OUTER JOIN ...

"The network path was not found"