我真的不确定提出这个问题的最好方法,但就SQL-Server的完美而言,我并不是真正需要最有效的方法,而是初学者处理单个问题的最简单方法t-sql查询中的父/子关系级别,没有太多偏离SQL-Server的完美。
例如:
EmployeeID | BossID | Sort
--------------------------
1 | NULL | 1
2 | 1 | 1
3 | 1 | 2
4 | NULL | 2
5 | 2 | 1
BossID为NULL的记录是老板,而其他人有老板。很简单。
我需要的是一个t-sql / sql查询,所以结果如下所示:
Boss
Employee
Employee
Boss
Employee
还要遵循老板的排序顺序以及员工的排序顺序。因此,Boss的服务顺序正确,员工在老板的下方处于适当的位置。
我知道如何做到这一点,但我正在寻找的是对该方法的批评。我需要最简单的方法向一般的新人解释。看看大量的例子,我看到很多方法,从递归到各种来源的疯狂复杂但很酷的东西。
以下是我现在正在处理它的方法,其中有效:
SELECT * FROM (
SELECT
EmployeeID
,BossID
,Sort
,Sort AS Above
,NULL AS Below
FROM Employee
WHERE BossID IS NULL
UNION
SELECT
e.EmployeeID
,e.BossID
,e.Sort
,x.Sort AS Above
,e.Sort As Below
FROM Employee AS e
JOIN Employee x on e.BossID = e.EmployeeID
WHERE e.BossID is not null
) as Employees
order by Employees.Above, Employees.Below
所以寻找批评。这个方法有什么问题会被SQL大师所厌恶吗?请记住,我需要尽可能简单地让初学者理解。
感谢您的想法。
答案 0 :(得分:0)
查找递归公用表表达式。这种分层查询是最好的解决方法。