mysql cte_MySQL 8 列出相关依赖 使用CTE(公共数据表达式)

直接 SQL 实现递归的 with 语法——公共数据表达式 Common Table Expressions (CTE) 是一个命名的临时结果集,它存在于单个语句的范围内,并可能在该语句后面引用,可能会多次。

# 创建测试表

create table job_depend(

sn_id int auto_increment comment '行号'

primary key,

job_id varchar(20) null comment '作业ID',

depend_job_id varchar(20) null comment '依赖作业'

)comment '作业依赖';

# 插入测试数据

INSERT INTO job_depend (job_id, depend_job_id) VALUES ('b', 'a');

INSERT INTO job_depend (job_id, depend_job_id) VALUES ('c', 'b');

INSERT INTO job_depend (job_id, depend_job_id) VALUES ('d', 'b');

INSERT INTO job_depend (job_id, depend_job_id) VALUES ('e', 'c');

# CTE 查询所有父代和子代 RECURSIVE(递归)

WITH RECURSIVE

parent(job_id, depend_job_id, level) AS(

SELECT job_id, depend_job_id, 0 AS level

FROM job_depend WHERE job_id = 'a'

UNION ALL

SELECT A.job_id, A.depend_job_id, level - 1

FROM job_depend A JOIN parent B ON A.job_id = B.depend_job_id

),

child(job_id, depend_job_id, level) AS(

SELECT job_id, depend_job_id, 0 AS level

FROM job_depend WHERE depend_job_id = 'a'

UNION ALL

SELECT A.job_id, A.depend_job_id, level + 1

FROM job_depend A JOIN child B ON A.depend_job_id = B.job_id

)

SELECT * FROM parent

UNION

SELECT * FROM child

ORDER BY level;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值