数据库向下递归

1、oracle向下递归

-- 向下递归
SELECT *
FROM erc_prop_cate_info
START WITH ID =2
CONNECT BY PRIOR id = PARENT_ID
order by ID;

2、mysql向下递归

# 向下递归
WITH RECURSIVE sub_tree AS (
    SELECT id,parent_id,name
    FROM mat_categ WHERE id = 1370
    UNION ALL
    SELECT o.id,o.parent_id,o.name
    FROM mat_categ o INNER JOIN sub_tree st ON o.parent_id = st.id
)
SELECT id FROM sub_tree;
### Oracle 数据库向下递归查询示例 在Oracle数据库中,可以通过`CONNECT BY`子句实现向下递归查询。此功能允许遍历树状结构数据,如组织架构图或文件目录。 #### 使用 `START WITH` 和 `CONNECT BY` 对于典型的父子关系表,假设有一个名为`EMPLOYEE`的表格,其中包含员工ID (`EMP_ID`)、经理ID (`MGR_ID`)以及姓名(`NAME`)字段: | EMP_ID | MGR_ID | NAME | |--------|--------|---------| | 1 | NULL | Alice | | 2 | 1 | Bob | | 3 | 1 | Carol | | 4 | 2 | Dave | 要获取某个特定节点及其所有后代的信息,可以构建如下SQL语句[^1]: ```sql SELECT LEVEL, SYS_CONNECT_BY_PATH(NAME, '/') "Path", EMP_ID, MGR_ID, NAME FROM EMPLOYEE START WITH EMP_ID = 1 CONNECT BY PRIOR EMP_ID = MGR_ID; ``` 这段代码会从根节点(即没有上级管理者的人)开始,沿着每条路径往下走直到叶子结点,并显示完整的层次结构和路径信息。 #### 利用 CTE 进行更灵活的操作 除了传统的`CONNECT BY`方式外,在较新的版本里还可以采用带有递归特性的公用表表达式(CTE),这使得编写更加复杂逻辑变得容易许多: ```sql WITH RECURSIVE emp_tree AS ( SELECT EMP_ID, MGR_ID, NAME, CAST('/' || NAME AS VARCHAR2(200)) as path, 1 level FROM EMPLOYEE e WHERE MGR_ID IS NULL UNION ALL SELECT child.EMP_ID, child.MGR_ID, child.NAME, parent.path || '/' || child.NAME, parent.level + 1 FROM EMPLOYEE child JOIN emp_tree parent ON (child.MGR_ID = parent.EMP_ID) ) SELECT * FROM emp_tree ORDER BY path; ``` 上述例子展示了如何利用CTE创建一个虚拟视图表来存储中间计算结果并最终输出整个树形结构的数据[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值