I have 2 tables with below info
Table# 1 – TaskDependecy
| TaskID | DependentTaskID |
|---|---|
| 1 | 2 |
| 1 | 3 |
| 3 | 6 |
| 3 | 7 |
| 5 | 8 |
Table # 2 – TaskStatus
| TaskID | Task Status |
|---|---|
| 1 | In Progress |
| 2 | Completed |
| 3 | In Progress |
| 5 | In Progress |
| 6 | Completed |
| 7 | Completed |
| 8 | Completed |
I want to retrieve only taskIDs # 3 and 5 so that I can update status of these taskIDs as Completed since all its dependent tasks are in completed status.
How to achieve this in SQL?
Advertisement
Answer
You can use conditional aggregation for this, which should work in either MSSQL or MySQL
select td.taskId from TaskDependency td join TaskStatus ts on ts.taskId = td.DependentTaskId group by td.TaskId having Sum(case when ts.TaskStatus='completed' then 1 end) = Count(*)