用SQL描述树

复制代码
/*40条(1层)
SELECT COUNT(*) FROM t01_mwfl WHERE AZFSDM=01 AND LEVEL=1 START WITH PID=0 CONNECT BY  PRIOR ID=PID
*/
SELECT * FROM t01_mwfl WHERE AZFSDM=01 AND LEVEL=1 START WITH PID=0 CONNECT BY  PRIOR ID=PID 

SELECT LEVEL FROM t01_mwfl WHERE AZFSDM=01 AND LEVEL=1   START WITH PID=0 CONNECT BY  PRIOR ID=PID 

/* 210条(2层)
SELECT COUNT(*) FROM t01_mwfl WHERE LEVEL =2 AND AZFSDM=01  START WITH PID=0 CONNECT BY  PRIOR ID=PID
*/
SELECT * FROM t01_mwfl WHERE LEVEL =2 AND AZFSDM=01  START WITH PID=0 CONNECT BY  PRIOR ID=PID 

SELECT LEVEL FROM t01_mwfl WHERE LEVEL =2 AND AZFSDM=01  START WITH PID=0 CONNECT BY  PRIOR ID=PID 

/*395条(3层)
SELECT COUNT(*) FROM t01_mwfl WHERE LEVEL=3 AND AZFSDM=01  START WITH PID=0 CONNECT BY  PRIOR ID=PID 
*/
SELECT * FROM t01_mwfl WHERE LEVEL=3 AND AZFSDM=01  START WITH PID=0 CONNECT BY  PRIOR ID=PID 

SELECT LEVEL FROM t01_mwfl WHERE LEVEL=3 AND AZFSDM=01  START WITH PID=0 CONNECT BY  PRIOR ID=PID 


复制代码
select * from WQGM_2V.t01_mwfl where  azfsdm='01' and pid=0 and id  in 
(
--通过字符串处理
select substr(substr(path,2),1,instr(substr(path,2),'/')-1) pid  from (
--取大于某层的树路径
SELECT sys_connect_by_path(id,'/') as path FROM WQGM_2V.t01_mwfl WHERE LEVEL>2 AND AZFSDM=01  START WITH PID=0 CONNECT BY  PRIOR ID=PID
)
)


/*三层*/

 /**/
SELECT ID,NAME,ROWNUM FROM WQGM_2V.t01_mwfl
WHERE PID=0 
AND AZFSDM='01' 
AND ID IN
(
   SELECT ID FROM WQGM_2V.t01_mwfl  MINUS 
(
   SELECT ID FROM WQGM_2V.t01_mwfl  MINUS 
   SELECT PID FROM  WQGM_2V.t01_mwfl 
)
)
 ORDER BY ID
 /**/
 SELECT ID,NAME,ROWNUM,LEVEL FROM WQGM.t01_mwfl 
WHERE PID=0 
AND AZFSDM='01'
AND ID IN
(
   SELECT ID FROM WQGM.t01_mwfl  MINUS
(
   SELECT ID FROM WQGM.t01_mwfl  MINUS 
   SELECT PID FROM  WQGM.t01_mwfl 
)
)
 START WITH PID=0 CONNECT BY PRIOR ID=PID 
 ORDER BY ID

/*四层*/

SELECT b.id,a.path,a.name FROM
(
SELECT id FROM WQGM.t01_mwfl MINUS
(
SELECT id FROM WQGM.t01_mwfl MINUS
SELECT pid FROM WQGM.t01_mwfl
)
) b
,
(
SELECT id,sys_connect_by_path(id,'/') as path,sys_connect_by_path(name,'/') as name,level as lv
FROM WQGM.t01_mwfl WHERE azfsdm=01 START WITH pid=0 CONNECT BY PRIOR id=pid
) a
WHERE a.id=b.id AND lv>1

 
复制代码

 



复制代码

 

posted @   韩梦芫  阅读(782)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示