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 都可以使用 表表达式实现递归。
优质生活从拆开始
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了