查询中的T-SQL父/子关系,有没有比这更好的方法?

时间:2014-12-30 11:50:30

标签: sql-server tsql

我真的不确定提出这个问题的最好方法,但就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大师所厌恶吗?请记住,我需要尽可能简单地让初学者理解。

感谢您的想法。

1 个答案:

答案 0 :(得分:0)

查找递归公用表表达式。这种分层查询是最好的解决方法。