如何在多对多关系中查找所有相关记录都满足条件的记录?
How to find a record in a many-to-many relationship where all its related records meet a condition?
我有一个叫 'Jobs' 的 table。每个作业都有一个状态,可以依赖于 0 个或多个其他作业,因此还有一个 join-table 来跟踪这种多对多关系。我正在尝试查找依赖成功的作业。
职位table:
Id | Name | Status
------------------
1 | A | WaitingForDependency
2 | B | WaitingToRun
3 | C | PartiallySucceeded
4 | D | Succeeded
加入table:
JobId | DependsOn
-----------------
1 | 3
1 | 4
状态可以是:
- WaitingForDependency
- 等待运行
- 运行
- 部分成功
- 成功
- 失败
在上面的示例 tables 中,我想找到作业 A,因为它的依赖项 C 和 D 的状态为成功或部分成功。
看看这是否适合您,一种方法是使用 exists
检查链接职位的合格状态计数是否与链接职位的计数相匹配:
select *
from jobs j
where exists (
select *
from jointable t
left join jobs js on js.Id = t.DependsOn
and js.[status] in ('PartiallySucceeded','Succeeded')
where t.jobId = j.Id
group by t.jobId
having Count(*) = Count(js.[status])
);
我有一个叫 'Jobs' 的 table。每个作业都有一个状态,可以依赖于 0 个或多个其他作业,因此还有一个 join-table 来跟踪这种多对多关系。我正在尝试查找依赖成功的作业。
职位table:
Id | Name | Status
------------------
1 | A | WaitingForDependency
2 | B | WaitingToRun
3 | C | PartiallySucceeded
4 | D | Succeeded
加入table:
JobId | DependsOn
-----------------
1 | 3
1 | 4
状态可以是:
- WaitingForDependency
- 等待运行
- 运行
- 部分成功
- 成功
- 失败
在上面的示例 tables 中,我想找到作业 A,因为它的依赖项 C 和 D 的状态为成功或部分成功。
看看这是否适合您,一种方法是使用 exists
检查链接职位的合格状态计数是否与链接职位的计数相匹配:
select *
from jobs j
where exists (
select *
from jointable t
left join jobs js on js.Id = t.DependsOn
and js.[status] in ('PartiallySucceeded','Succeeded')
where t.jobId = j.Id
group by t.jobId
having Count(*) = Count(js.[status])
);