查询引用到同一表的“ Id”的ID

时间:2019-10-11 11:10:23

标签: sql sql-server

我有一个AMZ_EMPLOYEE_DETAILS表,其中包含Employee IdEmployee NameSupervisor1Supervisor 2。主管本身就是雇员,但由其姓名代表。 我的任务是用其ID替换主管名称。

enter image description here

我已经使用以下查询来获取解决方案,但是它使用了子查询,并且查询确实进行了优化。为此,我还制作了一个维度表,其中包含所有IdEmployee NamesAMZ_EMPLOYEE

SELECT S1.ID, S1.EMP_NAME, S1.SUPER_1_NEW, ZZ.ID AS SUPER_2_NEW
FROM 
(SELECT A.ID,A.EMP_NAME,A.SUPER_1,A.SUPER_2,Z.ID AS SUPER_1_NEW 
FROM AMZ_EMPLOYEE_DETAILS A
LEFT JOIN 
AMZ_EMPLOYEE Z
ON A.SUPER_1 = Z.EMP_NAME ) S1
LEFT JOIN 
AMZ_EMPLOYEE ZZ
ON S1.SUPER_2 = ZZ.EMP_NAME 
ORDER BY 1

以下是预期的输出。

enter image description here

1 个答案:

答案 0 :(得分:2)

使用两个自我LEFT JOIN的逻辑是正确的。不过,您不需要使用子查询。考虑:

SELECT a.id, a.emp_name, a1.id, a2.id
FROM amz_employee_details a
LEFT JOIN amz_employee a1 ON a1.emp_name = a.super_1
LEFT JOIN amz_employee a2 ON a2.emp_name = a.super_2