父子关系的分层显示:start with和connect by prior

本文深入解析了使用SQL进行路径搜索与层级控制的查询技术,包括如何从特定父节点出发,选择其自身及所有子点,如何去除特定子分支,以及如何仅显示指定父节点的下一级子节点或排除其下级一层。同时,介绍了如何显示路径以及通过层级关键字筛选数据。这些技术对于理解关系型数据库中复杂的层级结构非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--1.以某个值为父点,选择其本身及所有子点,
SELECT t.fid, t.fparentid, t.fname, t.fcode
FROM table_commoncode t
START WITH t.fid = 020202090101  --父点,即以该点为起点,向所有分支查找,包括所有子子孙孙。
CONNECT BY PRIOR t.fid=t.fparentid;


--2.去掉某一些子分支
SELECT t.fid, t.fparentid, t.fname, t.fcode
FROM table_commoncode t
START WITH t.fid = 02020214  
CONNECT BY PRIOR t.fid=t.fparentid and ( t.fid not in (0202021402)); --去掉某一些分支




--3.以某个值为父点,只显示它的下级的一层
SELECT t.fid, t.fparentid, t.fname, t.fcode
FROM table_commoncode t
where t.fparentid in ( 020202140117 )--父点,只显示它的下一层,即只显示儿子一层。
START WITH t.fid = 0202  --开始节点只要在父节点的前面就行,不管是爷爷还是太袓,都一样,此处02、0202、02020214...结果都是一样的
CONNECT BY PRIOR t.fid=t.fparentid;


--4.以某个值为父点,去掉它的下级的一层
SELECT t.fid, t.fparentid, t.fname, t.fcode
FROM table_commoncode t
where t.fparentid != 0202021401 --不显示0202021401的子点,但其孙点显示
START WITH t.fid = 02020214  
CONNECT BY PRIOR t.fid=t.fparentid 


--5.显示路径
SELECT sys_connect_by_path(t.fname,'>') as path, t.fid, t.fparentid, t.fname, t.fcode
FROM table_commoncode t
where t.fid = 020202090101
START WITH t.fid = 020202  --父点
CONNECT BY PRIOR t.fid=t.fparentid;


--6.level 层关键字
SELECT  t.fid, t.fparentid,sys_connect_by_path(t.fname,'>') as path,level, t.fname, t.fcode
FROM table_commoncode t
where level=5 --start with起的(包括)第5层,
START WITH t.fid = 020202  --起始为第1层。
CONNECT BY PRIOR t.fid=t.fparentid;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值