是SQL SERVER么?写个表值函数行了
create FUNCTION [dbo].[f_xxx]
(
@id INTEGER
)
RETURNS TABLE
AS
RETURN
(
WITH ctb ( upid, cid )
AS ( SELECT
parent_node_id ,
child_node_id cid
FROM tablexxx
WHERE parent_node_id = @id
UNION ALL
SELECT
b.cid ,
A.child_node_id
FROM tablexxx A ,
ctb B
WHERE a.parent_node_id = b.[cid]
)
SELECT *
FROM ctb
)
加一个冗余字段,记录 节点的深度。例如 D的深度就是 A->B->C->D,
B的深度就是 A->B,查询的时候使用 深度 LIKE 当前登录人的组织,
欢迎加入.Net高级部落173844862