如何在多对多关系中查找所有相关记录都满足条件的记录?

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

状态可以是:

在上面的示例 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])
);