在工作中用到根据某个组织的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
(
SELECT
org.FID,
org.fname_l2,
org.FPARENTID,
org.FLEVEL
FROM
T_ORG_ADMIN org
where
org.fnumber = 'tymatest1'
union all
select
t.FID,
t.fname_l2,
t.FPARENTID,
t.FLEVEL
from
T_ORG_ADMIN t
join oo on oo.FPARENTID = t.FID
)
SELECT
distinct *
FROM
oo
join oo on oo.FPARENTID = t.FID 代表2个表之间的连接关系,向上查询
以下语句代表向下查询
join oo on oo.fid = t.FPARENTID 代表2个表之间的连接关系,向下查询
with oo as
(
SELECT
org.FID,
org.fname_l2,
org.FPARENTID,
org.FLEVEL
FROM
T_ORG_ADMIN org
where
org.fnumber = 'tymatest1'
union all
select
t.FID,
t.fname_l2,
t.FPARENTID,
t.FLEVEL
from
T_ORG_ADMIN t
join oo on oo.fid = t.FPARENTID
)
SELECT
distinct *
FROM
oo