有没有办法通过单个SQL语句到达层次结构的根目录?
该表的重要列将是:EMP_ID,MANAGER_ID。
MANAGER_ID自我加入EMP_ID,因为经理也是员工。给定EMP_ID是否有办法到达EMP_ID为空的员工(经理)(走上链)?
换句话说,组织中的顶级人物?
我正在使用SQL Server 2008
感谢。
答案 0 :(得分:0)
很难找到一个SQL查询,它会将结果与您对表的当前结构结合起来。像布雷特说的那样,你可以尝试使用存储功能。
但我认为最值得关注的是nested sets,这是在关系数据库中实现的树的一个经过充分确认的设计。
答案 1 :(得分:0)
你想要一个Common Table Expression。除此之外,他们可以像您正在寻找的那样进行递归查询。
答案 2 :(得分:0)
这是一个老问题,但我最近做了同样的事情,所以我想举一个关于这个问题的CTE表达的例子:
假设有一张桌子:
EMP_ID MANAGER_ID
1 NULL
2 1
3 NULL
4 2
5 3
6 5
7 3
CTE expresion开始于查找已经填充了空值的MANAGER_ID的根级别,并通过简单的内部联接到根级别的其他员工完成它
WITH PARENT
AS (
SELECT EMP_ID,
MANAGER_ID,
EMP_ID as BOSS
FROM tab
WHERE MANAGER_ID IS NULL
UNION ALL
SELECT T.EMP_ID,
T.MANAGER_ID,
PARENT.BOSS
FROM PARENT
INNER JOIN TAB T ON T.MANAGER_ID = PARENT.EMP_ID)
SELECT *
FROM parent;
结果如下:
EMP_ID MANAGER_ID BOSS
1 NULL 1
3 NULL 3
5 3 3
7 3 3
6 5 3
2 1 1
4 2 1