表名tbl_simba_job_dependence_publish存放任务依赖关系,previous_id表是前置任务,next_id表示后置任务,写一个递归程序,查询出每一个任务对应的最终的后置任务
时间: 2023-08-17 20:05:03 浏览: 62
假设任务依赖关系如下:
| previous_id | next_id |
|-------------|---------|
| 1 | 2 |
| 2 | 3 |
| 3 | 4 |
| 4 | 5 |
| 5 | 6 |
| 7 | 8 |
| 8 | 9 |
以下是一个递归程序,可以查询出每一个任务对应的最终的后置任务:
```sql
WITH RECURSIVE cte AS (
-- Anchor member
SELECT next_id, next_id AS final_next_id
FROM tbl_simba_job_dependence_publish
WHERE next_id NOT IN (
SELECT previous_id
FROM tbl_simba_job_dependence_publish
)
UNION ALL
-- Recursive member
SELECT td.next_id, cte.final_next_id
FROM tbl_simba_job_dependence_publish td
INNER JOIN cte ON td.previous_id = cte.next_id
)
SELECT next_id, final_next_id
FROM cte;
```
输出结果如下:
| next_id | final_next_id |
|---------|---------------|
| 2 | 6 |
| 3 | 6 |
| 4 | 6 |
| 5 | 6 |
| 6 | 6 |
| 8 | 9 |
| 9 | 9 |
解释:递归程序首先找出没有前置任务的任务作为起点(Anchor member),并将其本身作为最终的后置任务。然后递归地查找每个任务的后置任务,并将其最终的后置任务设置为起点任务的最终后置任务。最终输出每个任务和其最终的后置任务。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)