ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

sql递归查询处理树状结构数据,适用于sqlserver和oracle

2026/8/7 17:10:48 拓冰建站 浏览量
sql递归查询处理树状结构数据,适用于sqlserver和oracle

在工作中用到根据某个组织的ID,查询当前所有的上级,并按层级返回

递归语法:

以with开头,再以2个查询用 union all连接,且2个查询列表字段和类型返回必须一致

向上查询数据,oo是最终返回的表,也可以写为with oo as ....

但是不能写为 with oo(FID,fname_l2 ,FPARENTID)  去掉某一个列表字段的值

会报错显示SQL 错误 [8158] [S0001]: 'oo' 中的列多于列列表中指定的列。

--向上with oo(FID,fname_l2 ,FPARENTID,FLEVEL) as(SELECTorg.FID,org.fname_l2,org.FPARENTID,org.FLEVELFROMT_ORG_ADMIN orgwhereorg.fnumber = 'tymatest1'union allselectt.FID,t.fname_l2,t.FPARENTID,t.FLEVELfromT_ORG_ADMIN tjoin oo on oo.FPARENTID = t.FID)SELECTdistinct *FROMoo

 join oo on oo.FPARENTID = t.FID  代表2个表之间的连接关系,向上查询

以下语句代表向下查询

join oo on oo.fid = t.FPARENTID  代表2个表之间的连接关系,向下查询

with oo as(SELECTorg.FID,org.fname_l2,org.FPARENTID,org.FLEVELFROMT_ORG_ADMIN orgwhereorg.fnumber = 'tymatest1'union allselectt.FID,t.fname_l2,t.FPARENTID,t.FLEVELfromT_ORG_ADMIN tjoin oo on oo.fid = t.FPARENTID)SELECTdistinct *FROMoo