我有两张桌子
表:员工
EMP_ID EMP_NAME EMP_TYPE
1 Shwetha 1
2 Raj 1
3 Mani 1
4 Sita 2
5 Rani 3
6 Guna 2
表:EMPMAP
MAP_ID (PK) EMP_ID EMPMAP_ID
1 1 4
2 4 5
3 1 6
在第二张表中,它显示emp 4低于1,而4低于5,再次6低于1
我想取得在特定员工下工作的员工。例如,如果我将empid 1传递给查询,我需要员工4和5的详细信息,如果我想要4,则需要5的详细信息。
有谁能告诉我如何为此编写查询?
答案 0 :(得分:1)
select e.*
from EMPMAP map
join EMPLOYEE e on e.EMP_ID = map.EMPMAP_ID
where map.EMP_ID = @empId
答案 1 :(得分:1)
如果您使用的是SQL Server 2005或更高版本,或任何其他支持递归CTE(公用表表达式)的数据库,您可以编写这样的递归CTE,如果您需要给定员工下的所有级别的下属(不是只是下一级下属的下属):
DECLARE @StartEmpID INT = 1
;WITH EmployeeHierarchy AS
(
SELECT
e.EmpID, e.EmpName, e.EmpType, 0 AS 'Level', NULL AS 'Supervisor ID'
FROM dbo.Employee e
WHERE e.EmpID = @StartEmpID
UNION ALL
SELECT
e.EmpID, e.EmpName, e.EmpType, Level + 1 AS 'Level', map.emp_id
FROM dbo.Employee e
INNER JOIN dbo.EmpMap map ON e.EmpID = map.empmap_id
INNER JOIN EmployeeHierarchy eh ON map.emp_id = eh.EmpID
)
SELECT *
FROM EmployeeHierarchy
这将生成一个递归列表,其中列出了@StartEmpID
定义的所有员工 - 在几个级别上。
在你的情况下,你会得到这样的输出:
EmpID EmpName EmpType Level Supervisor ID
1 Shwetha 1 0 NULL
4 Sita 2 1 1
6 Guna 2 1 1
5 Rani 3 2 4
答案 2 :(得分:0)
首先,我想您想说,如果您通过emp_id 1,您需要员工4和6(不是4和5)的详细信息。 sql就是:
SELECT E.EMP_NAME, E.EMP_TYPE FROM EMPLOYEE E INNER JOIN EMPMAP EM ON E.EMP_ID = EM.EMPMAP_ID WHERE EM.EMP_ID = 1