MYSQL: 表表达式(CTE)实现递归实例

环境: MYSQL 8.0  + windows 10 

1、在TEST数据库中创建 表CTE_TEST.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
CREATE TABLE `test`.`cte_test`(
 test_id INT,
 test_name VARCHAR(50),
 parent_test_id INT,
 created_by INT,
 creation_date TIMESTAMP
 );
  
 例子数据:
 
 INSERT INTO  `test`.`cte_test`(
 test_id, test_name, parent_test_id
 )
 VALUES (1,'A1', NULL),
 (2,'B1',NULL),
 (3,'C3',1),
 (4,'D4',3),
 (5,'E5',3),
 (6,'B7',2),
 (7,'C7',4);
/** 层次结构
   1
  /
  3
  |\
  4 5
  |
  7
**/
SELECT * FROM  `test`.`cte_test`;
 
DELETE FROM  `test`.`cte_test`;
 
 
WITH recursive RECURSIVE_CTE(test_id, test_name, parent_test_id)
 AS(
SELECT test_id, test_name, parent_test_id
  FROM `test`.`cte_test` cte1
 WHERE  cte1.test_id = 7
 UNION ALL
SELECT ct.test_id, ct.test_name, ct.parent_test_id
  FROM `test`.`cte_test`  CT
 INNER JOIN  RECURSIVE_CTE CTE
  ON CT.test_id = cte.parent_test_id
)
SELECT * FROM RECURSIVE_CTE cte2
WHERE  cte2.parent_test_id IS NULL  -- 查最顶层的记录行
--  cte2.test_id = 4
;
  
 
 
 
SELECT * FROM `test`.`all_policies` ap
WHERE ap.object_name LIKE  '%RCV%' -- 'rcv_transactions'

  SQL SERVER 2008 以上; ORACLE 11G以上, MYSQL 8.0 都可以使用 表表达式实现递归。

 

posted @   samrv  阅读(83)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示