如何返回分层数据?

时间:2015-03-05 18:24:35

标签: sql

从下面的员工表中,我需要检索一名员工和经理。有人能帮我吗?提前谢谢。

tblEmployee:

empId    empName   manID
  1         A
  2         B        1
  3         C        2

输出:

Name  Manager
 A       -
 B       A
 C       B

3 个答案:

答案 0 :(得分:1)

一对基本方法将是

SELECT 
 'Name' = empName 
 , 'Manager' = (SELECT empName FROM tblEmployee WHERE empID = e.manID)
FROM tblEmployee e

SELECT
  'Name' = e.empName
  , 'Manager' = ISNULL(m.empName, 'none')
 FROM tblEmployee e
   LEFT JOIN tblEmployee m
      ON e.manID = m.empID

根据您使用的DBMS,可能有更好的方法。

答案 1 :(得分:1)

您需要自己加入表:

对于mysql,它将是:

SELECT
  t1.empName AS 'Name',
  IFNULL(t2.empName, '-') AS 'Manager'
FROM 
  myTable t1
LEFT JOIN
  myTable t2
ON
  t1.manID = t2.empId

t1现在将成为基本用户,而t2将包含经理(如果存在)。如果没有经理,t2.empName将为null,然后由-功能替换为ifnull

答案 2 :(得分:0)

利用Rightself加入

select t2.empName, t1.empName as Manager from tblEmployee t1 
right Join tblEmployee t2 on t1.empID = t2.manID
order by empName