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;

MySQL 8 两个新特性 公共数据表达式(临时结果集)官方文档: https://dev.mysql.com/doc/refman/8.0/en/with.html 窗口函数(逐行统计函数)官方文档: (不用 group by 而在每行显示类似 sum() 等结果,用来实现排名和占比等功能) https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏吴伟祥

为应用选择和创建最佳索引,加速数据读取 转

在工作之中,由于SQL问题导致的数据库故障层出不穷,索引问题是SQL问题中出现频率最高的,常见的索引问题包括:无索引,隐式转换,索引创建不合理。

834
来自专栏运维技术迷

MySQL数据库(四):约束条件

安装环境: 操作系统版本:RHEL 6.5 版本:MYSQL 5.5 约束条件的作用: 限制如何给字段赋值,创建表的时候如果没有设置的话,就是my...

3165
来自专栏面朝大海春暖花开

mysql树形结构递归查询

之前一直用的是Oracle,对于树形查询可以使用start with ... connect by 

2304
来自专栏个人随笔

MySQL 关于索引那点事

索引 其实数据库中的数据是按页存放的 其实索引也是按页存放的 所以本质上索引也占硬盘空间(以最小的消耗,换取最大的利益) 索引是一种有效组合数据的方式!为快速...

2689
来自专栏个人随笔

sql sever分组查询和连接查询

分组查询 select 查询信息 from 表名 where 条件 group by 按照列分组(可多个 ,隔开) order by 排序方式 (查询信息如果列...

2775
来自专栏java一日一条

理解MySQL——索引与优化

写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。考虑如下情况,假设数据库中一个表有10^6条记 录,DBMS的页面大小为4K...

522
来自专栏IT开发技术与工作效率

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

直接 SQL 实现递归的 with 语法——公共数据表达式 Common Table Expressions (CTE) 是一个命名的临时结果集,它存在于单个语...

2648
来自专栏互联网技术栈

【转】MySQL松散索引扫描与紧凑索引扫描

在优化group by查询的时候,一般的会想到两个名词:松散索引扫描(Loose Index Scan)和紧凑索引扫描(Tight Index Scan),因为...

653
来自专栏Hongten

mysql_语法总结

我们执行代码就可以创建test数据库了,如果想要查看我们是否创建好了数据库test,我们可以通过一下代码查看mysql中的所有数据库

672
来自专栏CaiRui

Mysql-5-数据表的基本操作

1.创建表:之前需要use database database_name 然后create table 表名(); 例:创建员工表tb_employee1,结构...

2156

扫码关注云+社区