我在数据库任务,用户和数据库中有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'
如果可能,请帮助查询。
答案 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'
)
答案 2 :(得分:1)
或者您可以使用OUTER JOIN ...
"The network path was not found"